WinAVR - mensi problemek se starup kodem
MK
info@mcu.cz
Středa Listopad 2 16:00:31 CET 2005
> Snad by mohla byt cesta vytvorenim vlastni inicializacni rutiny stejneho
> jmena jako ma ta knihovni. Linker by si mel vybrat tu vasi explicitne
> linkovanou. (nezkousel jsem)
> Co s vektory preruseni me nenapada. Pokud jste zatim neuspel, muzu zkusit
> stesti a kouknout do zdrojaku standardni knihovny, ale to asi az vecer.
Castecne se mi to podarilo vyresit nasledujicim zpusobem:
linkuji s parametry: -nostartfiles -nostdlib
a zacatek kodu je nasledujici:
void xmain(void) __attribute__ ((naked));
void start(void){
asm volatile ( "clr __zero_reg__" ); // r1 set to 0
SPL = (RAMEND-1)&0xFF;
SPH = (RAMEND-1)>>8;
asm volatile ("rjmp xmain");
}
void xmain(void){
......
......
}
Funkce start() nahrazuje pocatecni inicializi a musi minimalne znulovat r1 a
nastavit STACK,
nasleduje skok na funkci xmain() - coz je pouze prejmenovany puvodni main()
Takto jsem se zbavil kodu defaultni inicializace a tabulky vektoru
preruseni,
stale mi tam ale jeste zustava 58B silenost v sekci "_ctors_end", ktere se
nedokazu
zatim zbavit. Pritom se jedna o evidentne mrtvy kod
S pozdravem
MK
00003c00 <__ctors_end>:
3c00: fb 17 cp r31, r27
3c02: 1e 18 sub r1, r14
3c04: 36 18 sub r3, r6
3c06: 4b 1b sub r20, r27
3c08: 4b 1b sub r20, r27
3c0a: 6d 18 sub r6, r13
3c0c: 49 19 sub r20, r9
3c0e: 4b 1b sub r20, r27
3c10: 4b 1b sub r20, r27
3c12: 4b 1b sub r20, r27
3c14: 4b 1b sub r20, r27
3c16: 4b 1b sub r20, r27
3c18: 4b 1b sub r20, r27
3c1a: 4b 1b sub r20, r27
3c1c: 4b 1b sub r20, r27
3c1e: a1 18 sub r10, r1
3c20: 06 19 sub r16, r6
3c22: 0a 19 sub r16, r10
3c24: 2b 19 sub r18, r11
3c26: 7d 1a sub r7, r29
3c28: 2a 19 sub r18, r10
3c2a: 7c 1a sub r7, r28
3c2c: d3 1a sub r13, r19
3c2e: ea 1a sub r14, r26
3c30: d3 1a sub r13, r19
3c32: ea 1a sub r14, r26
3c34: ea 1a sub r14, r26
3c36: ea 1a sub r14, r26
3c38: 0d 1b sub r16, r29
Další informace o konferenci Hw-list