Forum: Mikrocontroller und Digitale Elektronik Inline-Assembler


von Flo82_2 (Gast)


Lesenswert?

Hallo zusammen,

ich versuche bei dem ATMega168 in einem Bootloader den Flash auszulesen, 
um zu prüfen, ob eine gültige Programmversion vorliegt.
Da es in C keine Funktion zum auslesen gibt, muss ich sie in 
Inline-Assembler nachbauen.

Sie soll eine Adresse addr erhalten und gibt value wieder zurück.

Ich habe schon die verschiedensten möglichkeiten ausprobiert und keine 
Ahung, wie es richtig heißen müsste...

Wäre wirklich sehr nett, wenn mir jemand wieter  helfen könnte. Ich 
hänge da jetzt fast schon 2 Tage dran...

Der Code:
1
    asm volatile(
2
    "ld z, %1   \n\t"
3
    "lpm        \n\t"
4
    "sts %0, r0 \n\t"
5
    : "=&r" ((uint8_t)value)
6
    : "m"  ((uint16_t)addr)
7
    : "r0" 
8
  );// asm

Vielen Dank schon einmal für eure Hilfe.

Grüße Flo

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Flo82_2 wrote:

> Da es in C keine Funktion zum auslesen gibt, muss ich sie in
> Inline-Assembler nachbauen.

pgm_read_byte(), aus <avr/pgmspace.h>.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Byte_lesen
Schau dir mal im Include-Verzeichnis avr/pgmspace.h an.

von Flo82_2 (Gast)


Lesenswert?

Ok,
super vielen Dank für die schnellen Antworten.

Ich hatte mir das GCC-Tutorial mal offline verfügbar gemacht, das ist 
aber schon gut  Jahre her... Gleich mal updaten.
Den Header kannte ich noch nicht.
Vielen Dank für die Info.

Grüße,
Flo

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.