闲谈swi与ucos-终结

来源:互联网 发布:体育比赛直播软件 编辑:程序博客网 时间:2024/06/05 10:51

UCOSiii在cortex m4上的移植已经完成,现总结如下:

  1. MCU s32k144
  2. 编译器 GNU gcc
  3. 开发环境 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.   对应的内核相关的寄存器的访问和地址的确认不要搞错了





0 0
原创粉丝点击