contiki:rz_raven_usb_at90usb1287_xram_with_xmem
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
contiki:rz_raven_usb_at90usb1287_xram_with_xmem [2013/09/14 12:20] – [Sinnvolle Nutzung des SRAMS] sven_zehl | contiki:rz_raven_usb_at90usb1287_xram_with_xmem [2017/01/24 18:49] (aktuell) – Externe Bearbeitung 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== RZ_Raven_USB Stick (AT90USB1287) External RAM Erweiterung (XRAM) über die XMEM Schnittstelle ====== | ====== RZ_Raven_USB Stick (AT90USB1287) External RAM Erweiterung (XRAM) über die XMEM Schnittstelle ====== | ||
- | Da der interne SRAM des RZ Raven USB Sticks (AT90USB1287) mit 8KByte relativ klein ist, entstehen immer wieder Probleme, welche meist durch einen Überlauf des Stacks in den Heap oder umgekehrt entstehen können, siehe folgende Abbildung | + | Da der interne SRAM des RZ Raven USB Sticks (AT90USB1287) mit 8KByte relativ klein ist, entstehen immer wieder Probleme, welche meist durch einen Überlauf des Stacks in den Heap oder umgekehrt entstehen können, siehe folgende Abbildung. |
{{: | {{: | ||
- | Besonders beim Einsatz als RPL Border Router ([[contiki: | + | Besonders beim Einsatz als RPL Border Router ([[contiki: |
===== Benötigte Hardware ===== | ===== Benötigte Hardware ===== | ||
Zeile 12: | Zeile 12: | ||
{{: | {{: | ||
- | Da um Pins zu sparen der Datenbus und die High Order Adress Bits über die gleichen Pins gesteuert werden, ist zusätzlich ein Latch erforderlich, | + | Da um Pins zu sparen der Datenbus und die High Order Adress Bits über die gleichen Pins gesteuert werden, ist zusätzlich ein Latch erforderlich, |
{{: | {{: | ||
Zeile 23: | Zeile 23: | ||
{{: | {{: | ||
- | Empfohlen werden laut [[http:// | + | Empfohlen werden laut [[http:// |
===== Register Konfiguration zur Aktivierung des externen SRAMs ===== | ===== Register Konfiguration zur Aktivierung des externen SRAMs ===== | ||
- | Um den neuen externen SRAM nun zugänglich zu machen, muss dieser aktiviert werden. Dazu muss das Register XMCMRA, genauer PIN7 von XMCMRA auf High gesetzt werden. | + | Um den neuen externen SRAM nun zugänglich zu machen, muss dieser aktiviert werden. Dazu muss das Register |
{{: | {{: | ||
- | Die restlichen PINs 0-6 (SLR0-SLR2, SRW10, SRW11, SRW00 und SRW01) sind zur Einstellung von " | + | Die restlichen PINs 0-6 ('' |
- | Ebenfalls nicht benötigt werden die Einstellung von Register XMCRB, welches es ermöglicht einzelne Address Bits zu maskieren um den vollen Addressraum auszunutzen. | + | Ebenfalls nicht benötigt werden die Einstellung von Register |
Umgesetzt in C Code kann folgende Funktion verwendet werden: | Umgesetzt in C Code kann folgende Funktion verwendet werden: | ||
Zeile 53: | Zeile 53: | ||
==== Umsetzung in Contiki ==== | ==== Umsetzung in Contiki ==== | ||
- | Um die Funktion sinnvoll in Contiki zu platzieren, bietet es sich an dies im Ordner platform/ | + | Um die Funktion sinnvoll in Contiki zu platzieren, bietet es sich an dies im Ordner |
- | Dazu bietet sich folgendes Vorgehen an (alles im Ordnerplatform/ | + | Dazu bietet sich folgendes Vorgehen an (alles im Ordner '' |
- | - Erstellen der C und Header Datei, z.B. [[contiki: | + | - Erstellen der C und Header Datei, z.B. [[contiki: |
- | - Integration von [[contiki: | + | - Integration von [[contiki: |
- | - Aufruf innerhalb der Lowlevel Initialisierung static void initialize(void) in der Datei [[contiki: | + | - Aufruf innerhalb der Lowlevel Initialisierung |
- | - Optional: An und Abschalten des externen RAMS durch Makro in [[contiki: | + | - Optional: An und Abschalten des externen RAMS durch Makro in [[contiki: |
===== Sinnvolle Nutzung des SRAMS ===== | ===== Sinnvolle Nutzung des SRAMS ===== | ||
- | Es stellt sich nun die Frage, wie die zusätzlichen 32KByte sinnvoll genutzt werden können. Eine Möglichkeit ist z.B. den internen Speicher für den Stack zu Nutzen und den Heap sowie die .data und .bss Sections in den externen RAM zu verschieben, | + | Es stellt sich nun die Frage, wie die zusätzlichen 32KByte sinnvoll genutzt werden können. Eine Möglichkeit ist z.B. den internen Speicher für den Stack zu Nutzen und den Heap sowie die .data und .bss Sections in den externen RAM zu verschieben, |
{{: | {{: | ||
Zeile 74: | Zeile 74: | ||
</ | </ | ||
- | Dadurch beginnt die .data Section ab der Adresse 0x2100. Die .bss und der Heap werden automatisch danach platziert. Lediglich das Heap Ende muss noch mitgeteilt werden. Der Stack bleibt wie gehabt beginnend beim Ende des internen Speichers, wächst abwärts und muss nicht geändert werden. | + | Dadurch beginnt die .data Section ab der Adresse |
- | Die Adresse 0x2100 ergibt sich durch die internen 8KByte ( 8*1024= 8192 Byte = 0x2000) sowie die Register von 0x0000 bis 0x00FF (255 Byte) = 0x20FF = letzte Adresse des internen SRAMs. | + | Die Adresse |
{{: | {{: | ||
- | Das Ende des Heap, also das Ende des externen SRAMS ergibt sich dann durch Addition der 32KByte (32*1024=32768=0x8000) mit 0x20FF + 0x8000 = 8192 + 255 + 32768 = 41215 = 0xA0FF = letzte Adresse des externen SRAMS = Ende Heap. | + | Das Ende des Heap, also das Ende des externen SRAMS ergibt sich dann durch Addition der 32KByte (32*1024=32768='' |
+ | |||
+ | Innerhalb von Contiki lässt sich die Linker Anweisung einfach in das Makefile mit dem Zusatz '' | ||
Überprüfen lässt sich die Änderung der Grenzen nach der Kompilierung mit dem Tool '' | Überprüfen lässt sich die Änderung der Grenzen nach der Kompilierung mit dem Tool '' | ||
Zeile 87: | Zeile 89: | ||
Vielleicht taucht beim Lesen die Frage auf, wie der komplette SRAM genutzt wird. Da der externe SRAM nach dem internen SRAM gemappt wird, führt eine Adressierung der ersten 8448 Byte immer zum internen RAM und nicht zum externen RAM. Das bedeutet, dass normalerweise der externe RAM erst ab dem 8449. Byte addressiert werden kann, wodurch ein Speicherbereich mit der Größe des internen SRAMS nicht genutzt werden kann. | Vielleicht taucht beim Lesen die Frage auf, wie der komplette SRAM genutzt wird. Da der externe SRAM nach dem internen SRAM gemappt wird, führt eine Adressierung der ersten 8448 Byte immer zum internen RAM und nicht zum externen RAM. Das bedeutet, dass normalerweise der externe RAM erst ab dem 8449. Byte addressiert werden kann, wodurch ein Speicherbereich mit der Größe des internen SRAMS nicht genutzt werden kann. | ||
- | Um dieses Problem zu umgehen, haben die Entwickler des Raven USB Sticks das Adressbit A15, welches normalerweise das höchste Addressbit darstellt nicht mit dem externen SRAM verbunden (siehe Schaltplan weiter oben). Das führt dazu, dass ab dem Nutzen der Adresse 0x8000 der unterste Teil des SRAMS adressiert wird, da durch das fehlen des höchsten Adressbits die Adresse 0x8000 als 0x0000 erscheint. Die folgende Abbildung verdeutlicht diesen Vorgang. | + | Um dieses Problem zu umgehen, haben die Entwickler des Raven USB Sticks das Adressbit A15, welches normalerweise das höchste Addressbit darstellt nicht mit dem externen SRAM verbunden (siehe Schaltplan weiter oben). Das führt dazu, dass ab dem Nutzen der Adresse |
{{: | {{: |
contiki/rz_raven_usb_at90usb1287_xram_with_xmem.1379161208.txt.gz · Zuletzt geändert: 2017/01/24 18:49 (Externe Bearbeitung)