Hallo Leute
Ich habe das Problem das ich für den unten gelisteten Code nur 48 Byte
Speicher zu verfügung habe. So wie er jetzt ist benötigt er aber 52
Byte.
Ich benutze einen ARM Cortex-M1 und den armcc Compiler. Die verschidenen
Optimierungs Optionen wie -Ospace und -03 liefern alle den selben ASM
Code.
Hat noch jemand eine Idee wie man den Code noch klein bekommen könnte?
Vielen Dank.
Sebastian
1
voidreset_handler(void)
2
{
3
4
/* bist is not executed if test pin is set HIGH */
5
if(RReg32(SYS_CTRL)&SYS_CTRL__testmode){}
6
else{
7
/* do start-up DMA/BIST if the according bit is set */
8
if(RReg32(SYS_CONFIG)&SYS_CONFIG__bist_en_trim){
9
do_start_up_dma();
10
}
11
}
12
13
/* wait until shutdown bit gets cleared */
14
while(RReg32(SYS_CTRL)&SYS_CTRL__shutdown){}
15
/* do start-up RAM_BIST if the according bit is set */
16
if(RReg32(0x0000C7F7)&0x04000000){
17
do_start_up_ram_bist();
18
}
19
main();
20
}
1
; generated by ARM/Thumb C/C++ Compiler, RVCT3.1 [Build 794]
Da es nur um maximal 48 Bytes geht, wäre inline ASM ein Möglichkeit.
Wenn es damit nicht geht, braucht man halt einen µC mit mehr 48 bytes
Speicher (bzw. spart an einer anderen Stelle des Programms).
Ich unterstelle mal, dass main() nie beendet wird.
Dann wäre
POP {r4,pc}
unnötig.
Vermutlich ist in Register r4 am Anfang nichts Sinnvolles gespeichert,
somit muss es auch nicht gerettet werden.
Damit ist
PUSH {r4,lr}
vermutlich auch unnötig.
Damit man den Teil dazwischen vernünftig versteht, sollte man die
Sourcezeilen mit in das listing schreiben lassen. Es ist schon möglich,
dass man da noch was sparen kann.
Grüße,
Peter