ARM7 In Flash speichern

Feb 25, 2010 5 Replies

Hallo zusammen,



bin Neuling auf dem Gebiet der ARM7-Programmierung und ben=F6tige mal = Hilfe von einem Freak:



Ich benutze den 2368 bzw 2378 Prozessor vom ARM, jeweils ein = Evaluation-Board habe ich. Jetzt mein Problem:=20



Ist es m=F6glich, au=DFer dem eigentlichen Progarmm auch separate (nur = ein paar Bytes, wie z. B. eine Kennung) zus=E4tzlich zum Programm an = eine bestimmte Speicherstelle des Flash zu schreiben, und wenn ja wie?



Stehe da auf dem Schlauch, das Handbuch des Proz. gibt da auch nicht = viel her.



Bin f=FCr jeden Hinweis dankbar.



Freundlicher Gru=DF


Roland


Roland Kuhn schrieb:

einem Freak:

habe ich. Jetzt mein Problem:

ARM stellt keine Prozessoren her, lediglich IP. Ich nehme an du meinst den LPC2368 von NXP?

Bytes, wie z. B. eine Kennung) zusätzlich zum Programm an eine bestimmte Speicherstelle des Flash zu schreiben, und wenn ja wie?

Ja, du musst allerdings eine ganze Page löschen.

formatting link
formatting link

Gruß, Johannes

>> Wo hattest Du das Beben nochmal GENAU vorhergesagt? > Zumindest nicht öffentlich! Ah, der neueste und bis heute genialste Streich unsere großen Kosmologen: Die Geheim-Vorhersage. - Karl Kaos über Rüdiger Thomas in dsa

Am 25.02.2010 18:39, schrieb Roland Kuhn:

einem Freak:

habe ich. Jetzt mein Problem:

Bytes, wie z. B. eine Kennung) zusätzlich zum Programm an eine bestimmte Speicherstelle des Flash zu schreiben, und wenn ja wie?

Wie Johannes Bauer bereits geschrieben hat, stellt ARM keine uC her. Schaue bei dem Hersteller des uC nach Librarys. Damit geht das dann relativ einfach.

Rolf

Johannes Bauer :

Wenn man nachträglich noch etwas eintragen möchte, geht es auch so, dass man die Zellen im Flash auf 1 lässt (0xffff) und die dann bei Bedarf auf Null schreibt, ohne vorher zu löschen. Allerdings darf man in einen bestimmten Flashblock (je nach Modell) zwischen Löschvorgängen auch nicht beliebig oft schreiben, selbst wenn andere Bits unbeeinflusst bleiben. (mal ins Datenblatt schauen nach "cumulative program time" o.ä.)

M.

Wenn die Kennung im gleichen Moment in den Flash soll wie das Programm, kannst du ja einfach das Programm jeweils entsprechend modifizieren. Natürlich nicht, indem du den Quelltext modifizierst und neubaust, sondern indem du in dem Programmimage rumschreibst. Wie das am kleversten geht, hängt jetzt von deiner Toolchain ab.

Für unser Projekt (kein ARM-Prozessor, würde da aber auch funktionieren) habe ich die Bootloader-Tools entwickelt, und habe da einfach eine Funktion eingebaut, die vor dem Generieren des Flashimages im Programm einen Variablenwert tauscht. Das heißt, im Programm steht char ident[100] = "nix"; und der Generator macht da "gebaut von X am Y" draus. ELF hat genug Symbolinformationen, dass das recht einfach ist.

Die nicht-ganz-so-Luxus-Version ist, rauszufinden, wo die Variable im .hex-file steht und das vor dem Flashen darin zu ersetzen.

Stefan

Also jeder Compiler kann auch Variablen auf eine feste Adresse legen. Da muss man nichts mehr suchen. Die Variable in einer separaten Datei anlegen, compilieren und mit dem restlichen Code linken. Sowas wie __DATE__ und __TIME__ kennt auch jeder Compiler.

Dirk

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required