Forum: Mikrocontroller und Digitale Elektronik AVR ATMega128 - Flash auslesen


von hilfmirdochmal (Gast)


Lesenswert?

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.

von Kai B. (kaib) Benutzerseite


Lesenswert?

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

von Oliver (Gast)


Lesenswert?

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

von M. H. (doktorgnadenlos)


Lesenswert?

bVar = *(unsigned char *)(0x0200)

wobei bVar die Bytevariable und 0x0200 exemplarisch die Adresse ist.
Das muss auch mit dem IAR-ompiler gehen.

von Oliver (Gast)


Lesenswert?

>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

von hilfmirdochmal (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.