Цитата(GetSmart @ Nov 25 2009, 17:54)

Тогда ещё листинг майна, в котором стоит SUB SP,SP,0x154. Судя по майну, локальных переменных там нет. Но если InitHardware() или tn_start_system() являются статическими, то они могут подставиться прямо в майн.
Код
2475 int main()
2476 {
\ main:
\ 00000000 00402DE9 PUSH {LR}
\ 00000004 55DF4DE2 SUB SP,SP,#+340
2477 tn_arm_disable_interrupts();
\ 00000008 ........ BL tn_arm_disable_interrupts
2478 InitHardware();
\ 0000000C ........ BL InitHardware
2479
2480 g_tneti.tnet = &g_tnet;
\ 00000010 54009FE5 LDR R0,??main_0 ;; g_tneti
\ 00000014 54109FE5 LDR R1,??main_0+0x4;; g_tnet
\ 00000018 001080E5 STR R1,[R0, #+0]
2481 g_tneti.ni[0] = &g_iface1;
\ 0000001C 50009FE5 LDR R0,??main_0+0x8;; g_tneti + 4
\ 00000020 50109FE5 LDR R1,??main_0+0xC;; g_iface1
\ 00000024 001080E5 STR R1,[R0, #+0]
2485 effective_settings_2_0=current_settings_2_0=default_settings_2_0;
\ 00000028 0D00B0E1 MOVS R0,SP
\ 0000002C 48109FE5 LDR R1,??main_0+0x10;; default_settings_2_0
\ 00000030 552FA0E3 MOV R2,#+340
\ 00000034 ........ BL __aeabi_memcpy4
\ 00000038 40009FE5 LDR R0,??main_0+0x14;; current_settings_2_0
\ 0000003C 0D10B0E1 MOVS R1,SP
\ 00000040 552FA0E3 MOV R2,#+340
\ 00000044 ........ BL __aeabi_memcpy4
\ 00000048 34009FE5 LDR R0,??main_0+0x18;; effective_settings_2_0
\ 0000004C 0D10B0E1 MOVS R1,SP
\ 00000050 552FA0E3 MOV R2,#+340
\ 00000054 ........ BL __aeabi_memcpy4
2495 tn_start_system(); //-- Never returns
\ 00000058 ........ BL tn_start_system
2496
2497 return 1;
\ 0000005C 0100A0E3 MOV R0,#+1
\ 00000060 55DF8DE2 ADD SP,SP,#+340 ;; stack cleaning
\ 00000064 0040BDE8 POP {LR}
\ 00000068 1EFF2FE1 BX LR ;; return
\ ??main_0:
\ 0000006C ........ DC32 g_tneti
\ 00000070 ........ DC32 g_tnet
\ 00000074 ........ DC32 g_tneti + 4
\ 00000078 ........ DC32 g_iface1
\ 0000007C ........ DC32 default_settings_2_0
\ 00000080 ........ DC32 current_settings_2_0
\ 00000084 ........ DC32 effective_settings_2_0
2498 }
Вот такая оказалась штука. Надо мне было еще чуток покопать прежде, чем в форум постить.
Замена строки
Код
effective_settings_2_0=current_settings_2_0=default_settings_2_0;
на
Код
effective_settings_2_0=default_settings_2_0;
current_settings_2_0=default_settings_2_0;
решает проблему без увеличения стека и оптимизации.
Спасибо за наводящие вопросы
Сообщение отредактировал grinux - Nov 25 2009, 15:13