首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用任何C函数时的STM32硬件故障

调用任何C函数时的STM32硬件故障
EN

Stack Overflow用户
提问于 2020-04-28 18:22:53
回答 1查看 381关注 0票数 2

为了学习更多关于ARM芯片的知识,在成功地使用汇编之后,我现在想混合使用C和汇编函数。但是,我调用的任何C函数都会导致硬件故障。我想我漏掉了一些明显的东西。

我使用gcc和这些标志进行编译

代码语言:javascript
复制
-c -g -ggdb -Wall --specs=nosys.specs

在链接时,我使用以下libc.a libgcc.a库

代码语言:javascript
复制
-L/usr/local/gnu-arm/arm-none-eabi/lib/thumb/v7e-m+fp/softfp -lc -L/usr/local/gnu-arm/lib/gcc/arm-none-eabi/9.2.1/thumb/v7e-m+fp/softfp

在objdump中,这是发生硬故障的地方:

代码语言:javascript
复制
 80004d4:   d3fb        bcc.n   80004ce <FillZerobss>
 80004d6:   f7ff ff09   bl  80002ec <SystemInit>

芯片在退出时会引发硬故障。

下面是SystemInit函数的第一行

代码语言:javascript
复制
080002ec <SystemInit>:
80002ec:    e52db004    push    {fp}        ; (str fp, [sp, #-4]!)
80002f0:    e28db000    add fp, sp, #0, 0
80002f4:    e59f3014    ldr r3, [pc, #20]   ; 8000310 <SystemInit+0x24>
80002f8:    e3a02302    mov r2, #134217728  ; 0x8000000
80002fc:    e5832008    str r2, [r3, #8]
8000300:    e1a00000    nop         ; (mov r0, r0)

而不是080002ec,我的结果是:

代码语言:javascript
复制
08000298 <HardFault_Handler>

我想我遗漏了一些很明显的东西,但我看不到。任何帮助或指针都会得到重视。

EN

回答 1

Stack Overflow用户

发布于 2020-05-01 02:36:05

这些评论表明,这个问题可能会在此期间得到解决。此答案收集了有用评论的摘要,以便对问题有一个简短的回答:

Idea (old_timer):

基于一些线索我猜你是在Cortex-M上运行的,它不能运行ARM指令,只能运行thumb指令,哪些thumb指令取决于芯片和内核。

这是什么芯片/核心?

OP (user13424266):

感谢大家的帮助,并为我指明了正确的方向。我给GCC添加了-mthumb -mthumb-interwork,现在它就像预期的那样工作了!

确认(Martin Rosenau):

@fuz我刚刚试过了: GNU链接器不能用blx代替bl。但是,STM32 CPU通常有Cortex-M内核,它既不支持非thumb代码,也不支持blx指令。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61477921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档