Hallo, ich benutze den ATMega 128. Ich Arbeite mit AVR Studio und IAR Embedded Workbench. Ich möchte meinen gesamten Flash (außer Bootloader Sektion am Ende) auslesen und per UART ausgeben. Ich brauche also eine Möglichkeit die Daten im Flash an einer bestimmten Adresse in einem Byte, einem Word oder einer Seite in eine Variable meines C-Programs zu bekommen. Die den Rest müsste ich dann hinbekommen.
Hi, schau doch mal im GCC Tutorial nach da steht zumindest was drin wie es beim GCC gemacht wird. Ist im Prinzip nichts anderes als ein LPM. So was wird es doch sicher auch dann beim IAR geben. kannst dir ansochen mal auch WinAVR runterladen und dir die Headerflies anschauen. MfG Kai
Neben RTFM hilft häufig auch eine einfache Suche. Die fördert das hier zu Tage: Beitrag "mit dem IAR compiler ein byte aus dem flash-speicher lesen" Oliver
bVar = *(unsigned char *)(0x0200) wobei bVar die Bytevariable und 0x0200 exemplarisch die Adresse ist. Das muss auch mit dem IAR-ompiler gehen.
>bVar = *(unsigned char *)(0x0200) ... >Das muss auch mit dem IAR-ompiler gehen. Auf einem AVR wird das, egal mit welchem Compiler, immer ins SRAM zeigen, nicht in den Flash. Oliver
Danke für die Hilfe. Die vollständige Lösung ist:
1 | word addr; |
2 | byte wert; |
3 | for (addr=0x0000;addr<0x0200;addr++) |
4 | {
|
5 | wert = *(__flash byte *)(addr); |
6 | ausgabe(wert); |
7 | }
|
Allerdings funktioniert sie nur für die ersten 64kB des ATMega ... ich probiere gerade was ich in der zweiten Hälfte nutzen muss und ob ich auch den Bootloaderbereich selber damit auslesen kann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.