打印
[应用相关]

F767板子使用UCOSIII+FPU出现浮点运算错误的问题

[复制链接]
306|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
七毛钱|  楼主 | 2021-3-17 14:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目采用F767芯片,使用了UCOSIII系统,实际运行中出现浮点计算数据异常的问题,后仔细排查发现输入值正常的情况下,计算结果出现了特别大的值。
后来将FPU关闭之后计算数值一切正常。
计算代码示意如下,其他值都正常,结果错的离谱。
  • traj_PATH_y = q_3*powf(traj_PATH_x,3)  + q_4*powf(traj_PATH_x,4)+  q_5 *powf(traj_PATH_x,5);
  • traj_PATH_theta = 180.0f/Pi*atanf((traj_PATH_y - traj_PATH_y0)/((traj_PATH_x - traj_PATH_x0)));

[color=rgb(51, 102, 153) !important]复制代码

每次出现错误的地方是随机的,只要是计算的数都有概率会错。
以下是几处配置的地方,不知有没有问题

1、option->target 选项中选择了use single precision
2、c/c++ 的define 中只添加STM32F767xx,USE_HAL_DRIVER
3、stm32f767xx.h中__FPU_PRESENT 设置为1

所有UCOS的任务都加入了OS_OPT_TASK_SAVE_FP选项,任务堆栈也都设置的很大,基本都是1024的。
没有用arm_math.h中的函数,只用了math.h的函数,按理讲应该只影响效率不影响结果的。

实在是搞不定了,在网上搜了好久也没有找到合理的解释。
现在怀疑两个方面的问题:
1、FPU配置的问题,不知道有没有不合适的地方;
2、UCOS运行会不会影响FPU的结果,没有找到相关的解释。

求大神指点,万分感激~~

使用特权

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

本版积分规则

318

主题

2198

帖子

4

粉丝