完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
经过很长一段时间试图调试为什么我的STM32F446RE微控制器的简单闪烁代码无法正常工作后,我在启动组件文件中发现了一条我正在链接到它的行,导致异常将微控制器推入无限循环异常处理程序。 这是主要代码:
导致异常的行是: /* Call static constructors */ bl __libc_init_array这导致微控制器跳转到最终导致异常的函数,从而跳转到Default_Handler无限循环。 您可能会注意到,此次通话后直接__libc_init_array进入我的入口点main。如果我bl __libc_init_array完全评论我的程序实际上工作正常; 它跳进main并继续运行代码以使我的LED闪烁。 我做了一arm-none-eabi-objdump -D blink.elf > blink.list' to see what __libc_init_array件事。这是功能:
但我并不流利的装配,所以我真的不知道它想要完成什么或产生什么。除了我的main.c之外,我唯一包含的其他源文件和启动程序集是system_stm32f4xx.c由cubeMX生成的(SystemInit调用的地方),但它没有调用函数__libc_init_array。 那么这个__libc_init_array功能来自哪里?为什么它会导致异常(将我的micro踢到异常处理程序)?以及如何防止这种情况(除了明显编写我自己的启动程序集而不包括无关的自动生成的文件)? 这是我用来构建代码的makefile:
除了blink.c我使用system_stm32f4xx.c哪个有system_init函数。 |
|
相关推荐
7个回答
|
|
您使用__libc_init_array库使用ARM(32b)指令进行编码,而不是使用Thumb(16b)指令进行编码。你用什么来编译你的代码?
|
|
|
|
这是初始化功能的一部分,是在主程序启动之前初始化和C / C ++对象的。崩溃的可能是您的代码或库中的某些内容或编译方式导致问题。
|
|
|
|
如果删除其余的源代码,执行是否会使其超过此阶段?你编写了多少示例代码?
|
|
|
|
很可能问题不在于您的源代码本身,而是在生成期间的链接步骤中。您可能正在使用为32位经典ARM(非CortexM)编译的库,它不使用拇指指令集。您用于编译的命令行和/或工具是什么?
|
|
|
|
尝试将-mthumb和-mcpu = cortex-m4添加到您的LFLAGS变量中。
|
|
|
|
解决方法是将-mcpu = cortex-m4和-mthumb添加到您的LFLAGS变量中。
我不是非常精通GCC的内部人员; 如果我弄错了,请有人纠正我。 需要添加标志的原因是由于调用链接器的方式。你正确地让gcc在编译过程中调用链接器。问题是ARM GCC具有与之关联的默认值,除非您在命令行上覆盖。可以通过键入找到默认值 arm-none-eabi-gcc -dumpspecs 有趣的是这一行 *multilib_defaults: marm mlittle-endian mfloat-abi=soft mno-thumb-interwork fno-leading-underscore 这意味着,除非您另行指定,否则这些默认标志将用于编译。“无拇指互通”选项正在扼杀该计划。该标志阻止GCC生成指示处理器改变指令体系结构的指令。 给-lcflags提供-mcpu和-mthumb标志给出了GCC关于如何正确编译程序的提示。 |
|
|
|
感谢各位的解答!
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1168 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1105 浏览 2 评论
2203 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1297 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1718 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 20:55 , Processed in 0.828082 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号