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 | void reset_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] |
2 | ; commandline armcc [-c --asm -o../software/ram_bist/reset_handler.o --cpu=Cortex-M1 -O3 --data_reorder -Oautoinline -Oinline --diag_suppress=2874 -I../software/CMSIS/Core/CM0/ -I../software/include/ -I../software/drivers/ -I../software/ram_bist/ -DMSC_CLOCK -DITERATIONS=5 ../software/drivers/reset_handler.c] |
3 | THUMB |
4 | REQUIRE8 |
5 | PRESERVE8 |
6 | |
7 | AREA ||.text||, CODE, READONLY, ALIGN=2 |
8 | |
9 | reset_handler PROC |
10 | PUSH {r4,lr} |
11 | MOVS r4,#1 |
12 | LSLS r4,r4,#30 |
13 | LDR r0,[r4,#0] |
14 | LSLS r0,r0,#27 |
15 | BMI |L1.22| |
16 | LDR r0,[r4,#0x10] |
17 | LSLS r0,r0,#29 |
18 | BPL |L1.22| |
19 | BL do_start_up_dma |
20 | |L1.22| |
21 | LDR r0,[r4,#0] |
22 | LSLS r0,r0,#30 |
23 | BMI |L1.22| |
24 | LDR r0,|L1.48| |
25 | LDR r0,[r0,#0x34] |
26 | LSLS r0,r0,#5 |
27 | BPL |L1.40| |
28 | BL do_start_up_ram_bist |
29 | |L1.40| |
30 | BL main |
31 | POP {r4,pc} |
32 | ENDP |
33 | |
34 | DCW 0x0000 |
35 | |L1.48| |
36 | DCD 0x0000c7c3 |
37 | |
38 | AREA ||.arm_vfe_header||, DATA, READONLY, NOALLOC, ALIGN=2 |
39 | |
40 | DCD 0x00000000 |
41 | |
42 | EXPORT reset_handler |
43 | |
44 | IMPORT ||Lib$$Request$$armlib|| [WEAK] |
45 | IMPORT main |
46 | IMPORT do_start_up_ram_bist |
47 | IMPORT do_start_up_dma |
48 | |
49 | ASSERT {ENDIAN} = "little" |
50 | ASSERT {INTER} = {TRUE} |
51 | ASSERT {ROPI} = {FALSE} |
52 | ASSERT {RWPI} = {FALSE} |
53 | ASSERT {IEEE_FULL} = {FALSE} |
54 | ASSERT {IEEE_PART} = {FALSE} |
55 | ASSERT {IEEE_JAVA} = {FALSE} |
56 | END |