背景
某自研芯片使用了杭州中天微研发的CK-CPU内核。中天微已经移植了uC/OS实时操作系统和Linux操作系统。然而有两方面原因要求我们再进行一些额外的适配工作:
一方面中天微的移植版本基于其CK610芯片和三叶虫开发板,而我们是在其内核上自研芯片,自研电路板;另一方面中天微提供的uC/OS版本是2.00和3.03,与我们使用的稳定版本2.91均不相同。
移植工作量分析
根据《嵌入式实时操作系统uC/OS-II》中的介绍,uC/OS的移植只需要修改os_cpu_c.c、os_cpu_a.S和os_cpu.h这三个文件,其中有11个数据类型,4个宏和14个函数。这些从现有的移植范例修改即可,无需从零开始编写。
uC/OS-III的文件结构做了大幅度调整,我们不按其文件结构修改,只在其中摘抄需要的代码片断。这样移植工作量并不大,只需要修改约几百行代码。
移植记录
os_cpu.h
数据类型
BOOLEAN、INT8U等都容易定义;OS_STK表示栈入口宽度,因为CK是32位CPU,定义为无符号int型;OS_CPU_SR表示状态寄存器的宽度,也是32位。
OS_CRITICAL_METHOD
表示临界区保护的方法,共有三种,分别是直接开关中断、在堆栈中保存中断状态、用局部变量保存中断状态。第一种方法不支持临界区嵌套,第二种方法有的编译器不能很好支持。我们选用了第三种方法,因此该宏定义为3,然后再定