gpt4 book ai didi

c - STM32F0使用GCC编程arm-none-eabi : hardfault in __libc_init_array

转载 作者:行者123 更新时间:2023-11-30 16:27:58 25 4
gpt4 key购买 nike

我正在尝试为 STM32L030x6 MCU 制作固件。

我编写了一个简单的代码,似乎可以在具有 STM32L030x8 MCU 的评估板上运行。我所说的“似乎有效”是指我能够访问主 fct 并切换 gpio。

但是当在我的目标 STM32L030x6 上闪烁时,我在启动代码的早期就遇到了硬故障:

Reset_Handler:
ldr r0, =_estack
mov sp, r0 /* set stack pointer */

/* Copy the data segment initializers from flash to SRAM */
movs r1, #0
b LoopCopyDataInit

CopyDataInit:
ldr r3, =_sidata
ldr r3, [r3, r1]
str r3, [r0, r1]
adds r1, r1, #4

LoopCopyDataInit:
ldr r0, =_sdata
ldr r3, =_edata
adds r2, r0, r1
cmp r2, r3
bcc CopyDataInit
ldr r2, =_sbss
b LoopFillZerobss
/* Zero fill the bss segment. */
FillZerobss:
movs r3, #0
str r3, [r2]
adds r2, r2, #4


LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss

/* Call the clock system intitialization function.*/
bl SystemInit
/* Call static constructors */
bl __libc_init_array <-------------- after a breakpoint here, typing "ni" in gdb hardaulft
/* Call the application's entry point.*/
bl main <----------------------------- never reach here

LoopForever:
b LoopForever

由于闪存大小不同,我相应地更改了链接描述文件,因此内存初始化一定没问题。

我不确定“__libc_init_array”的作用,它是 libc 的一部分(在我的例子中是 newlib-nano)。

一件有趣的事情是,如果我评论对“__libc_init_array”的调用,它在评估板上仍然运行良好,并且在我的目标上仍然存在硬故障。所以问题可能出在通话之前。

我对 SystemInit 非常有信心,因为它是 ST 的模板,可以处理两种 MCU。

这可能不是硬件问题,因为使用 Keil,我能够成功刷新我的目标并运行简单的应用程序代码。

知道可能是什么问题吗?那么对 libc 的调用有深入的了解吗?

非常感谢

最佳答案

Since flash sizes are different I changed the linker script accordingly

我敢打赌,您没有更改 vector 表中的堆栈初始地址(可能还有 RAM 大小),因此第一次调用会导致 HF。

顺便说一句,21 世纪的 gdb 命令行?浪费时间而且极其不方便。安装 Atollic Studio - 它是免费的,并且由 STM 支持(实际上 STM 是该公司的所有者)。轻松创建项目。

如果您要手动执行此操作,这将是一种压力和挫折的方式。

关于c - STM32F0使用GCC编程arm-none-eabi : hardfault in __libc_init_array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52559661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com