从移植的角度看uC/OS-II发展变化

ean J. Labrosse所著《MicroC / OS-II: The Real Time Kernel (Second Edition)(一下简称“宝书”)是基于1999年发布的2.00版本,目前uC/OS-II发展到了2.90(2010年发布),其自身已经发生了很大的变化。当移植新版本uC/OS-II时,会发现很多需要移植的声明、定义、函数等等已经不符合书中介绍的情况和方法了。在这里尝试做一个简单的比较和说明,以便能进一步简化和了解uC/OS-II的移植。本文只阐述涉及移植方面的变化,其它关于新功能、新函数以及各类优化的描述见另文。

1uC/OS-II中断使能状态的保存

除了宝书中定义的两种方法,从2.04版开始使用了第三种方法,即将中断使能状态保存在一个临时变量cpu_sr中,并且在OS_CPU.H中定义宏如下:

#if OS_CRITICAL_METHOD == 3

#define OS_ENTER_CRITICAL()     cpu_sr = OS_CPU_SR_Save())

#define OS_EXIT_CRITICAL()      OS_CPU_SR_Restore(cpu_sr))

#endif

所以不要忘记实现函数OS_CPU_SR_Save()OS_CPU_SR_Restore()

 

2新文件

2.00版相比uC/OS-II陆续增加了3个新文件。一个是OS_TMR.C,这是一个和处理器无关的内核文件,移植时加到工程/项目中即可。第二个是OS_DBG.C,其中定义了一系列的变量,用于内核调试器(Kernel Aware Debugger),可以按照实际使用情况决定是否包含此文件。第三个文件是APP_CFG.H,建议将用户任务级别,任务堆栈大小的定义放到这个文件中。

为了方便,uC/OS-II提供了2个原始模板文件OS_CFG_R.HOS_DBG_R.C使用时拷贝成不带_R后缀的文件然后按照使用要求再行修改。

 

3新常量

除了要按照硬件平台具体情况定义OS_TICKS_PER_SEC常量外,还要定义常量OS_TMR_CFG_TICKS_PER_SEC它决定了timer的更新速率。建议值是10也就是100ms更新一次timer

 

4新函数

uC/OS-II发展到2.90后,用户要自定义一系列钩子函数,当然在需要使用的情况下

void App_TaskCreateHook(OS_TCB *ptcb);

void App_TaskDelHook(OS_TCB *ptcb);

void App_TaskIdleHook(void);

void App_TaskReturnHook(OS_TCB *ptcb);

void App_TaskStatHook(void);

void App_TaskSwHook(void);

void App_TCBInitHook(OS_TCB *ptcb);

void App_TimeTickHook(void);

void OSTaskReturnHook(OS_TCB *ptcb);

 

5.移植实例

移植的uC/OS-II版本号为2.91,编译环境为WinAVR-20100110

硬件平台是一个ATmega644最小系统。一个用来显示多任务运行情况的LED接到PB1,另外还利用了644UART来输出当前CPU占用率。644外部晶振14.7456MHz,系统Timetick设置为17.7ms

 

所有源程序连接如下:

http://pan.baidu.com/share/link?shareid=130984&uk=1093185800

posted @ 2013-05-30 10:56  cronus象牙塔  阅读(499)  评论(0编辑  收藏  举报