mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik userprog dataflash


Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hab einen kleinen "Bootloader" geschrieben, welcher im Dataflash 
gespeichert ist. Nach dem Prozessorstart AT91RM9200 wird der Bootloader 
in den internen RAM 0x0 geladen und ausgeführt. Unter anderem ladet 
dieser Bootloader das Userprogramm welches ebenfalls im Dataflash 
abgelegt ist (offset 0x4200) in den SDRAM

Zum Schluss möchte ich gern dieses Userprogramm starten und springe an 
die Startaddresse vom SDRAM (an der sich auch das Userprogramm 
befindet). Zwar wird der Sprung ausgeführt, allerdings erfolgt auch 
innerhalb des Startup-Codes wieder ein Rücksprung auf 0x0, so dass das 
Boot-Programm immer wieder ausgeführt wird.

typedef void (*fnc)(void);
const fnc AppEntry = (fnc) 0x20000000;

int main(void)
{
  
  led();

  //cpy prog from df to sdram
  memcpy((char *)0x20000000, (char *)0x00004200, size); 
  
  //start app 
  AppEntry(); 

  return(0);

}


Gruß
Bernd

Autor: Haku (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Im Zweifelsfall häng den Prozessor doch auf:
for (;;);

Pass aber auf, dass der Optimierer nich zulangt.

Autor: Bernd Schuster (mms)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
//cpy prog from df to sdram
  memcpy((char *)0x20000000, (char *)0x00004200, size); 

hab ich hier lediglich im übertragenen Sinne verwendet. Eigentlich steht 
hier eine Funktion ReadSPI(), welche die notwendigen Commands etc. an 
das DF schickt und dadurch die Daten in den SDRAM kopiert werden.


>Im Zweifelsfall häng den Prozessor doch auf-...

Das würde nicht einmal funktionieren, da der Prozessor die while(1) oder 
for(;;) Schleife nicht erreichen würde. Der Prozessor führt den 
AppEntry() Sprung aus und innerhalb der ARM-Vektoren springt die 
Anwendung auf 0x0 zurück und startet somit den Bootloader wieder neu.




Bernd

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.