完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
大家好。我使用STM32f103工作中发现卡死问题。temp = -1800 * a /b;
然后out(temp); 执行这种代码,发现运行一定次数之后就卡死了,该段代码放在中断中就无法返回。如果放在主循环中,主循环卡死。如果我把temp换成一个常数或者简单的单次运算,就不会死机。请问这是为什么? |
|
相关推荐
39个回答
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
楼主 需要发一下整个temp如何处理的代码 有可能是溢出
|
|
|
|
|
|
都是long类型的运算,只剩下systick中断在运行,因为这个级别最高了。 |
|
|
|
|
|
仿真只能看到,停留在函数的第一条语句了,执行不下去了。 |
|
|
|
|
|
|
|
|
|
|
|
theta_temp = -1800 * (stepper.current_step_number)/(stepper.micro_steps) 这个micro_steps目前是个定值8,然后current_step_number是从0开始累加的数,有的时候到了590就卡死了。 |
|
|
|
|
|
|
|
|
|
|
|
另外我发现一个问题,如果我把我的模拟sci读取传感器的函数注释掉不调用,就没有问题。我怀疑是不是堆栈大小不合理。但是我调整堆栈也没什么效果。 |
|
|
|
|
|
运算导致异常了吧
|
|
|
|
|
|
|
|
|
|
|
|
楼主 请问 每次基本都是到590吗
|
|
|
|
|
|
基本都是,但是我如果改目标数就不一定。比如我给10000的目标数,可能到590,如果我改成100000,可能就变成每次都到4771,很奇怪。
|
|
|
|
|
|
那很好 建议你加代码 加589的时候断点 然后单步执行 看到底哪里的问题
|
|
|
|
|
|
你好!感谢回答,我发现单步调试没有问题。但是全速就没什么反应了。刚才单步调试,数值从597跳到了598,全速就完蛋了。
|
|
|
|
|
|
那你就改改 比如当589的时候让他变成591 全速跑 看看有没有问题
|
|
|
|
|
|
|
|
|
|
|
|
还有就是比如你怀疑哪里有问题 就可以把被怀疑的变量输出给一个你设置好的全局变量 这样你就可以看到想看的值是什么
|
|
|
|
|
|
楼主,你说了这么多废话,能直接上代码么!
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
651 浏览 0 评论
712 浏览 0 评论
STM32F405驱动DS1302时钟模块,输出时间错乱该怎么排查?
4375 浏览 2 评论
stm32f405rgt6驱动DS1302ZN出现时间错乱问题
3176 浏览 1 评论
stm32用fsmc读取ad7606采集数据,数据不变,只有开发版复位才更新数据
2629 浏览 0 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-9 23:57 , Processed in 0.955298 second(s), Total 108, Slave 91 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2244