硬件信息: CPU:STM32H750,内部FLASH:2M,RAM:1M,外部FALSH: 32M,SDRAM:32M 内部Flash烧录bootloader, 主要作用为转跳到外部Flash运行代码, 外部Flash放置6M左右主镜像运行 当前代码配置能正常转跳运行, 网口配置也正常能使用, 主镜像基础代码只有500K左右 当添加了三方的静态库链接和接口(C/C++)(主镜像大小为1.5M)后bootloader转跳到住镜像时会直接卡死, 通过分析是卡死在启动汇编中的 "bl __libc_init_array", 屏蔽掉这句之后能正常转跳但是主镜像运行起来之后会导致系统运行异常卡死 __libc_init_array卡死会是什么原因导致的
启动汇编 ``` .section .text.Reset_Handler .weak Reset_Handler .type Reset_Handler, %function Reset_Handler: ldr sp, =_estack /* set stack pointer */
/* Call the clock system initialization function.*/ bl SystemInit
/* Copy the data segment initializers from flash to SRAM */ ldr r0, =_sdata ldr r1, =_edata ldr r2, =_sidata movs r3, #0 b LoopCopyDataInit
CopyDataInit: ldr r4, [r2, r3] str r4, [r0, r3] adds r3, r3, #4
LoopCopyDataInit: adds r4, r0, r3 cmp r4, r1 bcc CopyDataInit /* Zero fill the bss segment. */ ldr r2, =_sbss ldr r4, =_ebss movs r3, #0 b LoopFillZerobss
FillZerobss: str r3, [r2] adds r2, r2, #4
LoopFillZerobss: cmp r2, r4 bcc FillZerobss
/* Call static constructors */ bl __libc_init_array /* Call the application's entry point.*/ bl main bx lr .size Reset_Handler, .-Reset_Handler ```
|