部分代码如下:
LDR r4,addr_OSTCBCur;/*得到当前任务的TCB地址*/
LDR r5,addr_OSTCBHighRdy;/*得到高优先级任务的TCB地址*/
LDR r5,[r5];/*得到堆栈指针*/
LDR sp,[r5];/*切换到新的堆栈*/
STR r5,[r4];/*设置新的当前任务的TCB地址*/
LDMFD sp!,{r4} /*新任务cpsr出栈*/
MSR CPSR_cxsf,r4
LDMFD sp!,{r0-r12,lr,pc}^;/*r0-r12,lr&pc出栈,运行新任务*/
系统时钟节拍中断函数OSTickISR()为内核提供时钟节拍。其周期决定了内核所能给应用系统提供的最小时间间隔服务。本移植中,IRQ是受μC/OS-II管理的中断,对FIQ不处理。时钟节拍的移植可通过汇编宏完成。
完成上述工作后,μC/OS-II就可以运行在ARM处理器上了。
3 移植测试
测试操作系统移植代码的正确性可以在没有应用程序的情况下进行,即让内核自己测试自己。笔者通过以下测试用例,经过编译、链接及下载到目标板中。验证系统移植是成功的。
void OSTaskIdleHook (void)
{
static i=0;
if(i%20000==0) /*每20000次点亮一个LED,*/
{
sysUtilsLightLed(LED_ALL,FALSE); /*关闭所有的LED */
sysUtilsLightLed(i%3+1,TRUE); /*循环点亮一个LED*/
}
i++;
return ;
}
4 结语
μC/OS-II 是一个具有良好应用前景的嵌入式实时内核,本文通过具体事例,成功实现了μC/OS-II在S3C44B0X上的移植。通过简单的测试用例,验证了移植是正确的,此成功移植为μC/OS-II 嵌入式实时系统的复杂应用,提供了基本的条件。
参考文献:
[1] Samsung Electronics Co. Ltd. S3C44B0 322BIT RISC MICROPRO2CESSOR USER’S MANUAL
[2] 杜春雷. ARM体系结构与编程[M ]. 北京:清华大学出版社, 2003
[3] 黄燕平著. µC/OS ARM 移植要点详解.北京:北京航空航天大学出版社.2005
2/2 首页 上一页 1 2 |