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.
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.
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.
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.
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.
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 ?
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
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
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.
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.