Код из конца __low_level_init:
Код
147 *AT91C_RSTC_RMR =0xA5000000;//(RSTC) Reset Mode Register: !user_reset, !irq
\ 000001E4 F700E0E3 MVN R0,#+247
\ 000001E8 800FC0E3 BIC R0,R0,#0x200
\ 000001EC A514A0E3 MOV R1,#-1526726656
\ 000001F0 001080E5 STR R1,[R0, #+0]
148
149 // proc_reset = (void (*)(void))(0x0000);
150
151 //delay_p(1);
152
153 }
\ 000001F4 1040BDE8 POP {R4,LR}
\ 000001F8 1EFF2FE1 BX LR ;; return
далее код внизу - почему проверяется R0 и что и откуда в нем должно быть - неизвестно(мне).
И почему он не POP-ится если в нем параметр, в котором говорится стоит ли запускать __iar_data_init2 ?
В результате инициализация переменных (__iar_data_init2) вызывается рэндомно.. В зависимости от того что зависло в R0 =)
Код
?main:
0000054C E3A00001 MOV R0, #0x1
00000550 EBFFFEB9 BL __low_level_init ; 0x3C
00000554 E3500000 CMP R0, #0x0
00000558 1BFFFFCD BLNE __iar_data_init2 ; 0x494
__iar_init$$done:
0000055C E3A00000 MOV R0, #0x0
00000560 EB00000B BL main ; 0x594
00000564 EB00001D BL exit ; 0x5E0
Оптимизация отключена. Что бы это могло быть?
Это кстати просто урезанный кусок. В другом варианте рабочий проэкт слегка дописывается и вся память становится порченная (возможно и связано с неинициализицией переменных), но в результате совсем все плохо..