
本帖最后由 baiyongbin2009 于 2014-12-23 19:30 编辑 特别说明: 1. 本教程是安富莱电子原创。 2. 安富莱STM32F407开发板资料已经全部开源,开源地址:地址链接 3. 当前共配套300多个实例,4套用户手册。 第10章 μCOS-III在高版本MDK开启FPU方案 由于官方提供的μCOS-III移植工程中对于浮点寄存器的入栈和出栈处理是错误的,所以网上就流传了各种修正版本。但是这些修正的代码只能在MDK4.7以下版本中可以正常的运行,MDK4.7及其以上的版本无法正常运行。本期教程为此而生。本期教程提供的方案只有任务使用了浮点寄存器(也就是做了浮点运算)才需要将其入栈,没有使用浮点寄存器的任务不需要进行入栈,认识到这点很重要。此方案在MDK4.54、4.73、5.10以及IAR6.3、6.7上面测试均通过。 10.1 官方移植方案 10.2 开启FPU解决方案 10.3 开启FPU的优劣 10.4 总结 10.1 官方移植方案 官方提供的移植工程里面,只有IAR工程里面才有浮点寄存器的入栈和出栈处理函数,MDK工程里面是没有的。下面这个是os_cpu_c.c文件夹中的函数:
* +------------+ +------------+ * | | | | * +------------+ +------------+ * | xPSR | | xPSR | * +------------+ +------------+ * |Return Addr| |Return Addr | * +------------+ +------------+ * | LR(R14) | | LR(R14) | * +------------+ +------------+ * | R12 | | R12 | * +------------+ +------------+ * | R3 | | R3 | * +------------+ +------------+ * | R2 | | R0 | * +------------+ +------------+ * | R1 | | R1 | * +------------+ +------------+ * | R0 | | R0 | * +------------+ +------------+ * | R11 | | R11 | * +------------+ +------------+ * | R10 | | R10 | * +------------+ +------------+ * | R9 | | R9 | * +------------+ +------------+ * | R8 | | R8 | * +------------+ +------------+ * | R7 | | R7 | * +------------+ +------------+ * | R6 | | R6 | * +------------+ +------------+ * | R5 | | R5 | * +------------+ +------------+ * | R4 | | R4 | * +------------+ +------------+ * (a) | FPSCR | * +------------+ * | S31 | * +------------+ * . * . * . * +------------+ * | S1 | +------------+ * | S0 | * +------------+ * (b) |
(续)10.1 官方移植方案
10.2.2 修改函数OS_CPU_PendSVHandler
本期教程提供的方案在MDK4.54、4.73、5.10以及IAR6.3、6.7上面测试均通过,用户只需按照上面讲的三个地方做修改即可。