Forum: Mikrocontroller und Digitale Elektronik avr map file frage


von chris (Gast)


Lesenswert?

Hallo.
Ich habe ein Programm verändert und nun möchte ich einfach die 
Möglihkeit
haben, variablen wärend der Laufzeit ueber rs232 zu verändern.
wenn im Map file für eine Byte Variable 0x00800101 drin steht,
dies ergibt diese Addresse 122011221 . Sie erscheint mir komisch oder 
viel
zu hoch.
ich möchte im Programm sowas haben , cli gibt es schon:
*((unsigned char*)addr)=value;
Ich will einfach mit einfachen Mittels Variablen patchen koennen, ohne
die cli aufwendig zu erweitern. Mir get es darum, teile des Codes zu 
testen,
ohne vorher das Drumherum schreiben zu muessen.

danke fuer die Hilfe.

von Peter II (Gast)


Lesenswert?

chris schrieb:
> Mir get es darum, teile des Codes zu
> testen,
> ohne vorher das Drumherum schreiben zu muessen.

das wird kaum sauber funktionieren. dafür müssen auch alle Variabel als 
Volatile gekennzeichnet sonst kann es sein das sie nur im Register 
stehen.

von Detlef K. (adenin)


Lesenswert?

chris schrieb:
> wenn im Map file für eine Byte Variable 0x00800101 drin steht,

Es sind wieder Informationsspartage. ;)

Ich hab verschiedene Tools und eines erzeugt zB Daten dieser Art:
1
DSEG oldKey       00000102
2
DSEG keytimer     00000103
Also ganz brauchbar.
Entweder ist deine Toolchain mist, oder Du interpretierst die Daten 
falsch.

von Detlef K. (adenin)


Lesenswert?

Peter II schrieb:
> chris schrieb:
>> Mir get es darum, teile des Codes zu
>> testen,
>> ohne vorher das Drumherum schreiben zu muessen.
>
> das wird kaum sauber funktionieren. dafür müssen auch alle Variabel als
> Volatile gekennzeichnet sonst kann es sein das sie nur im Register
> stehen.

Wenn sie in der Map mit Adresse aufgeführt sind, sind sie sicher nicht 
im Register.

von Peter II (Gast)


Lesenswert?

Detlef Kunz schrieb:
> Wenn sie in der Map mit Adresse aufgeführt sind, sind sie sicher nicht
> im Register.

doch, kurzeitig. Sonst bräuchte man ja kein volatile, denn diese 
variablen stehen auch im map-file.

von chris (Gast)


Lesenswert?

Die variablen sind in einem C File declariert und andere C-Files greifen
darauf zu, aber ich habe es gerade getested, volatile zuzufuegen stellt 
kein
Problem dar. Die Adresse ist fast ähnlich.
Wieso ist die Adresse von ram im AVR derart hoch ?
kann man die einfach so verwenden ?

von chris (Gast)


Lesenswert?

Ja, das Problem ist, ich kenne mich zu wenig mit AVR's aus.

ich hatte folgende Zeile im Make
avr-gcc -Wall -Os -DF_CPU=16000000 -mmcu=atmega328p -I. 
-ffunction-sections -o main.elf main.o ... -lm -Wl,--gc-sections

Diese hatte ich auf folgende geaendert, um ein map file zu bekommen
avr-gcc -Wall -Os -DF_CPU=16000000 -mmcu=atmega328p -I. 
-ffunction-sections -o main.elf main.o ... -lm 
-Wl,--gc-sections,-Map,main.map

Auszug aus dem resultierenden Map file:
.data          0x00800100        0x9 motion.o
                0x00800100                w_idx
                0x00800101                v_idx
                0x00800102                u_idx
                0x00800103                c_idx
                0x00800104                b_idx
                0x00800105                a_idx

von Detlef K. (adenin)


Lesenswert?

Peter II schrieb:
> Detlef Kunz schrieb:
>> Wenn sie in der Map mit Adresse aufgeführt sind, sind sie sicher nicht
>> im Register.
>
> doch, kurzeitig. Sonst bräuchte man ja kein volatile, denn diese
> variablen stehen auch im map-file.

Oh, ich hab übersehen, das es hier darum geht, eine Variable blind zu 
überschreiben, ohne das man eine Ahnung hat, wie die CPU damit umgeht. 
;)

@chris
Nunja, Du solltes vielleicht mal nach googlen (oh, das böse Wort) was es 
mit GCC+Mapfile+Format auf sich hat.
Dann wirst Du darauf kommen das
                0x00800100                w_idx
w_ids an Adresse 0x0100 steht und das 0x080 ... such selbst!

: Bearbeitet durch User
von chris (Gast)


Lesenswert?

Es gibt eine State machine, und der Code läuft nicht, wenn da 
rumgepatcht wird. Ziel ist es einen Bug zu reproduzieren, und da wäre 
solch ein Patch
Interface recht hilfreich. Die Schaltung hängt an der Netzspannung, und
ich habe nur eine isolierten rs232 half duplex Verbindung.

von chris (Gast)


Lesenswert?

Danke

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.