Kód: Egész kijelölése
epc1=0x40201c2f epc2=0x00000000 epc3=0x00000000 excvaddr=0x456789ab depc=0x00000000
Vegyünk egy programot, amelyik fagyizik:
Kód: Egész kijelölése
void setup() {
Serial.begin(115200);
Serial.println("Elindultam...");
delay(2000);
}
void ittFogunkFagyizni(int szamlalo)
{
if( szamlalo == 123 )
*(int *)0x456789AB = 13;
}
int szamlalo = 0;
void loop() {
ittFogunkFagyizni(szamlalo++);
}
Kód: Egész kijelölése
Exception (9):
epc1=0x40201c2f epc2=0x00000000 epc3=0x00000000 excvaddr=0x456789ab depc=0x00000000
ctx: cont
sp: 3ffef1c0 end: 3ffef390 offset: 01a0
>>>stack>>>
3ffef360: 00000000 00000000 00000001 40202001
3ffef370: 3fffdad0 00000000 3ffee358 4020202c
3ffef380: feefeffe feefeffe 3ffee370 40100114
<<<stack<<<
- Keressük meg hogy az Arduino hová fordította a progamunkat (nálam sketch_dec03b.ino.elf a lefordított kód neve).
- Keressük meg az xtensa alkalmazásokat (xtensa-lx106-elf-addr2line)
Azért nem írok teljes elérési utat, mert ahány Arduino, annyi helyen lehet.
Miután megtaláltuk a lefordított elf fájlt és az xtensa binárist, adjuk ki a következő parancsot:
Kód: Egész kijelölése
> xtensa-lx106-elf-addr2line -f -C -e sketch_dec03b.ino.elf 0x40201c2f
ittFogunkFagyizni(int)
/home/ckarai/avr/arduino/projects/sketch_dec03b/sketch_dec03b.ino:10
A nagyon elvadult informatika mániások akár ki is listázhatják a kódot:
Kód: Egész kijelölése
>xtensa-lx106-elf-objdump -s -S sketch_dec03b.ino.elf
40201c24 <_Z17ittFogunkFagyiznii>:
void ittFogunkFagyizni(int szamlalo)
{
if( szamlalo == 123 )
40201c24: 7ba032 movi a3, 123
40201c27: 069237 bne a2, a3, 40201c31 <_Z17ittFogunkFagyiznii+0xd>
*(int *)0x456789AB = 13;
40201c2a: fffd21 l32r a2, 40201c20 <setup+0x34>
40201c2d: d30c movi.n a3, 13
40201c2f: 0239 s32i.n a3, a2, 0
40201c31: f00d ret.n