打印
[AT32F407]

at32f437流水线设计是不是有问题??

[复制链接]
1437|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

我在用贵公司的at32f437做控制系统。程序基本移植成功跑起来了,但有些异常。 经过调试,发现是数据赋值错误

两个断点之间的指令如果单步执行都是对的。
如果连续跑(F5),R0的结果是正确的。但是[R5,#0x70]里赋值为了0,应该是把R9的值赋值过去了。
所以不是__aeabi_d2f出错了。 而是str r0指令出错了。
基本可以排除中断或者任务切换造成的。

STR R9,[R10,#0x50] 对应的c语言为ret = 0;
如果把ret = 0;这句放到别的地方,系统就可以正确运行了。
请问这是什么原因造成的。

使用特权

评论回复
沙发
muyichuan2012| | 2022-7-3 18:09 | 只看该作者
流水线是指cpu指令的执行,at32是arm的m4 内核,请先不要怀疑这里。如果使用上有问题,建议把代码工程贴上,大家给你看看。

使用特权

评论回复
板凳
jkeqiang|  楼主 | 2022-7-3 18:41 | 只看该作者
上面的图片就有代码,既有汇编,又有c的

使用特权

评论回复
地板
james03| | 2022-7-3 21:30 | 只看该作者
我感觉是不是优化等级开高了

使用特权

评论回复
5
binbin0317| | 2022-7-7 16:26 | 只看该作者
本帖最后由 binbin0317 于 2022-7-7 16:33 编辑

就那么一小段没前后的,能帮你分析的人估计都没空上网。像R5,R10之类的寄存器值怎么来的都没看到。真的没看懂你要描述什么问题。流水线什么的是内核内部事情,那个都已经是CM4核里面的东西,估计跟芯片关系不大。如果优化等级不是O0,不妨改一下试试。而且看来应该是基于RTOS,如果这些变量有多个线程会访问,我觉得你试试前后加锁或关开全局中断,可能会试出问题。

使用特权

评论回复
6
pattywu| | 2022-7-7 16:49 | 只看该作者
浮点数与多线程的问题,估计是。

使用特权

评论回复
7
jkeqiang|  楼主 | 2022-7-16 09:15 | 只看该作者
这是优化造成的。
但是从汇编指令没有看出任何问题, 所以奇怪。
另外也想知道如果在写程序时如何避免此类问题。

使用特权

评论回复
8
084425| | 2022-7-23 22:33 | 只看该作者
一般没事别乱用优化,要么就一点一点程序添加,添加一点测一点。一个复杂项目设计完成后再开优化多半会有问题

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

237

主题

313

帖子

2

粉丝