userprog dataflash

OP #914664
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.
1
typedef void (*fnc)(void);
2
const fnc AppEntry = (fnc) 0x20000000;
3

4
int main(void)
5
{
6
  
7
  led();
8

9
  //cpy prog from df to sdram
10
  memcpy((char *)0x20000000, (char *)0x00004200, size); 
11
  
12
  //start app 
13
  AppEntry(); 
14

15
  return(0);
16

17
}


Gruß
Bernd
OP #914680
1
//cpy prog from df to sdram
2
  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

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.