完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
调试过程中, 出现了 FPU active 硬件故障, 可以百分百复现, 但是在线调试之后, 无论如何都无法触发这个硬件故障了, 而且, 之后下载的程序, 也不会触发这个问题, 请问有知道这是什么情况吗
|
|
相关推荐
11个回答
|
|
|
只是提示当前程序使用了FPU,不代表与Hardfault有关。
当然也有可能相关,但从大家的情况来看,概率较小,要根据实际情况来分析。 你这里的问题,可以通过PC和LR寄存器来分析, 看你打印的寄存器,R3的值就很可疑,一般都是空指针和野指针造成的, 你看下你的PC和LR指向哪些代码,就基本有数了。 另外,日志显示你这个异常发生在中断里面。 也可能是中断栈溢出了。 |
|
|
|
|
|
刚刚又重新复现了, 然后我把中断里面处理浮点数的函数, 通过信号量扔到线程里面处理了, 问题好像似乎解决了, 谢谢大佬
|
|
|
|
|
|
又尝试找了一个根本原因, 发现还是能复现这个问题, 然后使用cmbacktrace 捕获到死在了atof函数 , 重写了一把, 最终定位为除以浮点数会概率性死机, 如果把 x/10.0 换成 x/10 , 就不会死机, 请问这可能是什么原理 , 芯片为 stm32l475vet6
|
|
|
|
|
|
如果换成 两个整数直接相除, 也会出现FPU active 错误
|
|
|
|
|
|
|
|
|
|
|
|
打错字了不是整数, 是两个实数相除, 比如把那一部分换成 9/10.0 , 没有变量参与计算.也会死掉
|
|
|
|
|
|
如果怀疑浮点部分出问题,主要查以下几点:
浮点明确要求栈是8字节对齐,线程栈在 cpuport.c 中做,中断栈一般在汇编文件中定义,也是8字节对齐的。 使用浮点后,栈的使用会加大,可能原来已经快溢出了,现在用了浮点,就刚好溢出 最上面图中有PC和LR地址,对应地址的指令请先去检查一下。 |
|
|
|
|
|
|
|
|
|
|
|
上面代码有语法或逻辑错误吗? 不管哪种都没有!
那怎么查呢? 既然代码本身没问题,那只能查他的运行环境了。 看指令,看数据,看地址,看栈使用情况,。。。 特别是栈的使用情况,我点我觉得很有可能就是这里有问题。 建议在异常处下断点,然后看此时的栈使用到哪里了,离栈底还有多远。 |
|
|
|
|
|
线程栈对齐问题, 使用最新的4.02 版本, 检查cpuport.c 中, 确实有8字节的对齐的代码; 线程栈大小, 出问题的线程给到2048字节, 使用率 14%, 使用率都比较低 运行地址, 用addr2line 查看, 死在了atof_my 函数里面了
|
|
|
|
|
|
找到问题了, 是我一个结构体数组太小了,导致偶尔越界访问, 经过这次排查, 学到了不少新知识
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 04:08 , Processed in 0.837308 second(s), Total 64, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1560