打印

求一篇以前的帖子,关于打开M4硬件浮点之后函数参数的问题

[复制链接]
2808|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
watcher|  楼主 | 2012-6-12 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前看过一篇帖子,说使用Cortex-M4时,如果函数参数多余5个,且打开浮点处理器时会导致编译器使用浮点指令处理参数。帖子找不到了,tg把“指令”列为敏感词,google搜不到。
谁记得这个帖子,给个链接吧。

我似乎遇到了类似的问题:移植ucos-iii时,某函数中生成了浮点指令,导致一运行到那就hard fault。只有使用软浮点才行,但是这个问题肯定还要解决
沙发
adce| | 2012-6-12 18:43 | 只看该作者
那个是ucOS特有的bug...
CM4有十多个常规寄存器 还有好多浮点寄存器...好像是30多个...
ucOS在做任务切换的时候 需要保存寄存器...
KEIL编译器在用不到浮点寄存器的时候会把浮点寄存器当常规寄存器用来加快速度...
也就是函数从第5个参数开始会放在浮点寄存器中...
而ucOS只保留了常规寄存器....
所以就出错误了...
解决方法是
1.加入浮点寄存器压栈出栈...
2.更新ucOS...
3.换FreeRTOS 7.1

只有第3个是靠谱的...
因为ucOS你很难找到干净的版本...大多数都是各种"高手"修改的面目全非的版本....

使用特权

评论回复
板凳
ilovezeno| | 2012-6-12 19:06 | 只看该作者
有人求我以前发的帖子了,内牛满面地路过。。。。

使用特权

评论回复
地板
ilovezeno| | 2012-6-12 19:08 | 只看该作者
如果一运行到那就hardfault 那应该是stm32库函数的问题,打开fpu的寄存器设置没写,这是例程中system init函数的问题,有些例程有,有些例程没有。。。
如果是ucosiii随机性的跑飞,那是fpu没压栈的问题。。。。

使用特权

评论回复
5
watcher|  楼主 | 2012-6-12 19:10 | 只看该作者
找到了,谢谢老大

使用特权

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

本版积分规则

15

主题

39

帖子

0

粉丝