Ругань прекратилась, сборка прошла. А дальше - веселуха. управление на main не передаётся. Раскопки дали следующее: использую библиотеку STM32F4xx_DSP_StdPeriph_Lib_V1.4.0, перетягиваю всё из примеров, и не работает. В файле startup_stm32f40xx.s перед передачей управления такой код:
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
bl __libc_init_array
/* Call the application's entry point.*/
bl main
bx lr
Если ставлю на начало этого фрагмента - "есть контакт", если после
SystemInit - "есть контакт", если как задумано - "фигвам". По идее, убирать совсем не стоит, в lss файле такое:
08000358 <__libc_init_array>:
8000358: b570 push {r4, r5, r6, lr}
800035a: 4e0f ldr r6, [pc, #60] ; (8000398 <__libc_init_array+0x40>)
800035c: 4d0f ldr r5, [pc, #60] ; (800039c <__libc_init_array+0x44>)
800035e: 1b76 subs r6, r6, r5
8000360: 10b6 asrs r6, r6, #2
8000362: d007 beq.n 8000374 <__libc_init_array+0x1c>
8000364: 3d04 subs r5, #4
8000366: 2400 movs r4, #0
8000368: 3401 adds r4, #1
800036a: f855 3f04 ldr.w r3, [r5, #4]!
800036e: 4798 blx r3
8000370: 42a6 cmp r6, r4
8000372: d1f9 bne.n 8000368 <__libc_init_array+0x10>
8000374: 4e0a ldr r6, [pc, #40] ; (80003a0 <__libc_init_array+0x48>)
8000376: 4d0b ldr r5, [pc, #44] ; (80003a4 <__libc_init_array+0x4c>)
8000378: 1b76 subs r6, r6, r5
800037a: f000 f815 bl 80003a8 <_etext>
800037e: 10b6 asrs r6, r6, #2
8000380: d008 beq.n 8000394 <__libc_init_array+0x3c>
8000382: 3d04 subs r5, #4
8000384: 2400 movs r4, #0
8000386: 3401 adds r4, #1
8000388: f855 3f04 ldr.w r3, [r5, #4]!
800038c: 4798 blx r3
800038e: 42a6 cmp r6, r4
8000390: d1f9 bne.n 8000386 <__libc_init_array+0x2e>
8000392: bd70 pop {r4, r5, r6, pc}
8000394: bd70 pop {r4, r5, r6, pc}
8000396: bf00 nop
8000398: 00000000 .word 0x00000000
800039c: 00000000 .word 0x00000000
80003a0: 00000000 .word 0x00000000
80003a4: 00000000 .word 0x00000000
Ассемблер этих камней не знаю, но возврата в основной код не вижу (а значит, и ячейки для хранения результатов могут исполняться?). Последние команды оперируют с
pc, но достаточно ли этого? Если это баг, куда репорт кидать?
gcc version 4.8.4 20140725 (release) [ARM/embedded-4_8-branch revision 213147] (GNU Tools for ARM Embedded Processors)