从发布的第一个M4内核的uCOS-III工程以来,基本每次的Demo里面移植代码都跟以前不同,咱还能整个稳定版本不?
一个FPU入栈出栈问题,每个Demo都重新折腾一遍,本以为他们已经做稳定了,打算后面的V5和V6都采用这种方式。
实际测试也没问题。
结果就在M7内核上面又发布了新版本,也开始使能FPU的Lazy Stack特性了,以前的版本不用,这个版本
开始用了,看来是被众多的用户吐槽的不行了,决定还是放弃以前的通用FPU入栈和出栈方式了。
其实我们的V5板子,早在2013年的时候就修改了官方的实现,使用了Lazy Stack,实际测试IAR和MDK版本
都很好用。项目中使用也是完全没有问题的。比官方的那种通用的FPU入栈和出栈方式效率更高。但是考虑到以后
升级uCOS的通用性,主要怕官方升级源码,决定采用官方的方式了,结果又闹了了这么一出。
详情请看这个帖子的os_cpu_a.asm的实现:http://www.armbbs.cn/forum.php?mod=viewthread&tid=18009,其中文件os_cpu_c.c
文件里面的OSTaskStkInit函数写的有些臃肿了,创建任务阶段不存在浮点入栈和出栈问题,无需做浮点寄存器初始化。
估计他是怕用户创建的栈空间不足。
我觉得官方后面uCOS-III还得继续折腾这个底层移植,大家敬请期待官方如何折腾。有兴趣大家可以了解下RTX和
FreeRTOS的底层移植,这么多年了,这个底层移植早在M4内核处理器发布之初就把移植文件定下来。 总结------: 说uCOS是所有这些主流OS里面移植最麻烦的,一点也不为过。
暂时就吐槽这么多吧,下次接着给大家吐槽下官方uCOS-II的底层移植问题,即8字节对齐问题,也是坑苦了太多初学者。 ====================================================================
下面这段文字比较重要,官方的说明是在浮点单精度FPv4,FPv5和浮点双精度FPv5上都测试通过,兼容M3,M4和M7内核
; Note(s) : (1) This port supports the ARM Cortex-M3, Cortex-M4 and Cortex-M7 architectures.
; (2) It has been tested with the following Hardware Floating Point Unit.
; (a) Single-precision: FPv4-SP-D16-M and FPv5-SP-D16-M
; (b) Double-precision: FPv5-D16-M
完整的地址移植文件截图: