智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12484|回复: 1
打印 上一主题 下一主题

STM32F407上移植带FPU的UCOS-III

[复制链接]

2

主题

2

帖子

0

精华

注册会员

Rank: 2

积分
24
威望
14
贡献
8
兑换币
6
注册时间
2013-9-28
在线时间
2 小时
毕业学校
华东理工大学
跳转到指定楼层
1#
发表于 2013-9-28 10:46:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

最近闲来无事将UCOS-III跑在STM32F407上试试,从Micrium官网上下载了最新的移植工程。

发现官网上的UCOS-III也是不带FPU的,看来只能自己动手了。


移植UCOS-III不多说,其实就是把官网提供的移植搬到我们自己的工程上,接着研究FPU。

首先根据Cortex-M4的描述,FPU有32个32位的单精度寄存器S0-S31,也可以组成16个64位的双精度寄存器D0-D15。

当使能FPU的时候,中断入栈如下,其中:

第一个不知道是啥,没有名字,第二个是FPU的状态控制寄存器,后面是S15到S0,接下来才是和M3一样的入栈。如果没有使能FPU,那么入栈也和M3一样。这也就是为什么当没有使用FPU的时候,M3移植的UCOS直接拿过来就能用的原因。

根据这些说明,移植的地方主要就是要在入栈出栈的时候考虑到FPU就可以了。

因此需要改的地方也就两处,一个是OSTaskStkInit函数,另一个是PendSVHandler,具体的代码我就不贴了,大家可以下载我的工程,只要思路清晰了代码都是浮云。

果然经过修改后,代码能成功运行,另外为了验证,我在例子工程中特意加入了TestA和TestB两个任务,TestA主要是用FPU来运算,TestB主要的任务时捣乱,把TestA正在运行的FPU弄乱。经过编译调试,TestA的确是使用FPU运算的,TestB也的确是搅乱了FPU,但是TestA却能得到正确的值,说明移植的Context保存和还原还是正常的。


下载及原文: http://www.eamonning.com/blog/view/418

54

主题

782

帖子

1

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3569
QQ
威望
1896
贡献
243
兑换币
1222
注册时间
2012-11-24
在线时间
715 小时
2#
发表于 2013-11-23 23:52:52 | 只看该作者
虽然我还不懂,但还是感谢楼主
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-4-25 05:01 , Processed in 0.110239 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表