新闻中心

EEPW首页>嵌入式系统>设计应用> 实时操作系统µC/OS-II在ARM7上的移植

实时操作系统µC/OS-II在ARM7上的移植

作者: 时间:2012-03-20 来源:网络 收藏

4.3 OS_CPU_C.C 文件分析

这个源文件中有6个函数需要移植,即OSTaskStkInit()、OSTaskCreatHook()、OSTaskDelHook()、 OATaskSwHook()、OSTaskStatHook()和OSTASKTickHook()。后面5个函数又称为钩子函数,主要用来扩展µC/OS-II功能。但必须声明,并不一定要包含任何代码。唯一必须移植的函数是OSTaskStkInit()。该函数在任务创建时被调用,它负责初始化任务的堆栈结构。这个函数在大部分ARM处理器中移植时都可以采用一种形式。

5 测试移植代码

在EmbestIDE编译器上编译基于的µC/OS-II操作系统代码。编译结果表明,裁剪后的µC/OS-II操作系统的代码占用的空间少,代码通过了编译。为了验证基于的µC/OS-II操作系统移植的是否成功,本文创建了两个测试任务来验证其合理性。

创建的2个测试任务及源码如下:

OSTaskCreate (TestTransplantA, (void *) 0, TestTransplantAStk[StackSize-1], 2);

OSTaskCreate (TestTransplantB, (void *) 0, TestTransplantBStk[StackSize-1], 3);

void TestTransplantA (void *pdata)

{ pdata=pdata;

while(1) {

uart_printf("TaskA ");

OSTimeDly (400);

}

}

Void TestTransplantB (void *pdata) {

pdata=pdata;

while(1) {

uart_printf("TaskB ");

OSTimeDly(200);

}

}

多任务调度开始后,通过超级终端接收的UART0的数据为:taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB taskA taskB taskB ……。高优先级的任务TestTransplantA()首先被调度运行,说明OSTaskStkInit()和OSStartHighRdy()函数是正确的。任务TestTransplantA()和任务TestTransplantB()由时钟节拍驱动而周期地被调用,说明OSCtxSw、 OSIntCtxSw()、OSTickISR()也是正确的。通过以上两点可以认为移植结果是正确的。

6 结束语

在µC/OS-II平台下开发程序,首先要掌握内核。通过上述移植过程,能够对任务堆栈,任务调度有深刻理解。作为一种开放源代码的操作系统,以其优越的性能在应用领域占据了非常广泛的发展空间。移植结果表明,经过裁剪的µC/OS-II在上的移植是成功的。

参考文献

[1] S3C44BOX MICROPROCESSOR Datasheet.Samsung Electronics,2001.

[2] 田 泽.开发与应用教程[M]. 北京:北京航空航天大学出版社,2005.

[3] 任 哲. 嵌入式实时操作系统µC/OS-II原理及应用[M]. 北京:北京航空航天大学出版社, 2005.

[4] 张春雷 王东兴. µC/OS-II在C8051F020单片机上的移植[J]. 微计算机信息, 2006, (22): 95-97.

[5] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社, 1999, 106-141.


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭