UCOSiii在cortex m4上的移植已经完成,现总结如下:
- MCU s32k144
- 编译器 GNU gcc
- 开发环境 DS32 / NXP Freescale
其中遇到很多细节的调试,然后one by one 克服,
1. OSCtxSw 上下文切换,和 OS_CPU_PendSVHandler 异常挂起中断服务函数,这里首先要把ARM cortex m4 technical reference manual 和 ARMv7-M Architecture Reference Manual 过一遍,两者都必须看,后者更详细一些。汇编部分其中重要的几个/多个指令必须理解,而每个编译器对相应能够支持的汇编指令集也要关注,比如IAR 和 GCC 就不同,thumb 和 arm 汇编指令的支持情况也不同, cortexm0,
cortexm3, cortexm4 也有小的区别,具体情况必须谨慎排查。
2. 关于gcc arm 汇编源文件的格式,
/*-----------------------------------------------------------------------------------------------------*/
头
.text
.align 2
.thumb
.syntax unified
函数头
.thumb_func
OSStartHighRdy:
这两个头在汇编源文件里必须好好放着,没有!后果consequence会怎么样呢?就是.c文件可以访问它需要调用的汇编,但是汇编却没有参与到整个工程的编译,比如你的中断服务函数在汇编文件里定义编写,尽管你写了,也build了,但是真正中断发生时你会发现飞了,为什么?因为你写的这个中断服务函数根本没有参与编译,以上就是后果consequence。
/*---------------------------------------------------------------------------------------------------*/
3. 关于初始化函数时遇到的问题,千!万!注!意!特!别!提!醒! OS_ERR 类型一定要构造一个实体变量而后取地址,而不是像这样:(OS_ERR*)(0),这样的结果程序直接飞掉,通过调试,你会发现每次都是对R3和R7寄存器操作的时候直接复位。
4. 对应的内核相关的寄存器的访问和地址的确认不要搞错了