智能车制作

标题: STM32F407上移植带FPU的UCOS-III [打印本页]

作者: eamonning    时间: 2013-9-28 10:46
标题: STM32F407上移植带FPU的UCOS-III

最近闲来无事将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


作者: yyyzrxh    时间: 2013-11-23 23:52
虽然我还不懂,但还是感谢楼主




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2