www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Kopieren eines Programms aus Flash zum RAM


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich möchte für meinen ARM9 (AT91SAM9261) einen Bootloader entwickeln. 
Ein wichtiges Feature ist, dass der Bootloader, der selber aus dem 
externen Flash laufen kann, die Applikation, die ebenfalls im Flash 
gespeichert ist, in das interne SRAM kopiert und diese danach ausführt?

Wie gehen ich dabei vor?
Ich habe:
- die Adresse des Programms im Flash
- die Adresse des SRAMs
- die Größe des Programms

Ich programmiere in C (oder notfalls Assembler) mit der ARM Developer 
Suite und benutze den AxD-Debugger.

Autor: Marius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in C geht das glaube ich mit memcpy, danach einfach die adresse des 
hauptprogramms als funktionspointer anlegen und aufrufen.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So einfach ist das nicht. Die Applikation (Variablenadressen, 
Funktionsadressen) muss zur Compile/Linkzeit bereits für die SRAM 
Adressen angepasst werden.

Dies steuert man in der GCC Toolchain mit dem Linker Control Script, in 
dem die Speicherbereiche für CODE, DATA, BSS und Stack definiert werden.

Wahrscheinlich muss auch der Startup-Code angepasst werden, weil ja 
bestimmte Initialisierungen vom Bootloader erhalten bleiben müssen 
(Einsprungpunkt, Variablen?, Stack?) und andere für die Applikation 
vorbereitet werden müssen (andere Vektoren, Variablen, Stack?).

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde die Applikation bereits so linken, dass sie für die Adresse 
des SRAM angleget ist.
Weiterhin initialisiert die App zuerst das OS (µC_OSII), womit die 
Speicherbereiche usw. angelegt werden. Die Initialisierung vom Startup 
wird wirklich nur zum kopieren (und einstellen der PLL, damit es 
schneller läuft) benötigt.

Ein weiteres Problem habe ich (oder etwa doch nicht?):
Mein Flash hat eine Adressbreite von 16 Bit, mein µC hat aber 32 Bit 
(als auch das SRAM). Kann ich die App dann einfach so kopieren, und wenn 
ja, kopiere ich in WORD oder DWORD Schritten?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ein weiteres Problem habe ich (oder etwa doch nicht?):

Ja das musst du klären. Dahinter verstecken sich zwei Aufgaben

1/ Wenn das Flash und deine Applikation mehr als 64 KByte gross ist, wie 
kopierst du den Bereich oberhalb der 16 Bit Adressen? Gibt es bei dem 
speziellen Flash eine Art Banking, welches du in der Kopierroutine 
berücksichtigen musst?

2/ Wie ist der Zugriff auf das Flash möglich? Im Datenblatt des Flashs 
müsste stehen ob BYTE (8 Bit), WORD (16 Bit?) oder gar DWORD (32 
Bit?)Zugriffe möglich sind. Dementsprechend muss deine Kopierroutine 
ausgelegt sein. Das SRAM wird wohl alle Arten verkraften, das sollte 
nicht das Problem sein.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.