STM32F4+ucosii硬件浮点问题,计算出来的与printf出来的不一样。

2019-07-21 02:12发布


左边为仿真的值,为1.049999  右边串口调试的值。为-2.0.
用的是STM32F4+ucosii+FPU.
难到这样打印也会出错。出现过正确的情况,后又在另一个任务里加了点东西,就显示不正确了。
和字节对齐有关吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
taizonglai
1楼-- · 2019-07-21 04:58
 精彩回答 2  元偷偷看……
augustedward
2楼-- · 2019-07-21 07:14
补一句,不用硬件浮点输出就是正确的。和仿真的一样 1.05%。
我也仿真单步调试了,在上面计算时用到硬件VMOV VLDR等语句。计算结果也是正确的,说明硬件浮点应该没有问题,就是打印出来不正确!
augustedward
3楼-- · 2019-07-21 13:00


值为1.04999995  转换成16进制后为0x3f866666,也就是R0;
断点设置在printf()前。单步调试后,发现在0x0801693c这一行,指令为R0的值逻辑左移23位后放入到R1中。
在不加FPU的情况下,R1的值变成了0x3FF,不知道怎么算出来的,执行下去,打印出来的值为1.05%,是正确的。
在加了FPU的情况下,R1的值变成了0x7F,这个和我算出来的一样,但执行下去,打印出来的值一直都为-2.0%,是错误的。

求大神解答。汇编不是很熟。想不通,同样的汇编代码,同样的R0。为什么在有FPU和没FPU的情况下得出两种结果。
augustedward
4楼-- · 2019-07-21 16:38
回复【3楼】augustedward:
---------------------------------
哦写错了,不是逻辑左移,是逻辑右移了23位
正点原子
5楼-- · 2019-07-21 17:08
printf所在的任务,任务堆栈,做8字节对其,再试试.
augustedward
6楼-- · 2019-07-21 18:13
 精彩回答 2  元偷偷看……

一周热门 更多>