基于Cortex-M3核的μCOS-II移植与应用(3)
本文作者(潘丽蕊,袁保社),请您在阅读本文时尊重作者版权。
OSStartHighRdy();
OSCtxSw();
OSIntCtxSw();
OSPendSV();
IntDisAll()。
OSStartHighRdy()函数的作用是使用调度器运行第一个任务,也就是运行就绪态任务中优先级最高的任务。
OSCtxSw()函数的作用是进行任务级的上下文切换。任务级的切换是通过执行软中断指令来实现的,要求中断服务子程序、陷阱或异常处理的向量地址要指向OSCtxSw()。
OSIntCtxSw()函数在ISR中执行任务切换功能。与OSCtxSw()函数基本相同,不同的只是不用在OSIntCtxSw()函数中保存CPU的寄存器。
OSPendSV()函数的作用是进行上下文切换。
IntDisAll()函数用于关闭中断控制器中的所有中断。
6 μCOS-II的测试及简单应用
6.1 μCOS-II的测试
当为处理器做完μCOS-II的移植后,紧接着的工作就是验证移植的μCOS-II是否正常工作,而这可能是移植中最复杂的一步。应该首先不加任何应用代码来测试移植好的μCOS-II,也就是说,让内核自己测试自己。有2个理由促使这样做:首先,用户不希望将事情复杂化;其次,如果出现了问题,可以明白问题是出现在移植的内核代码中,而不是应用程序的问题。
可以使用不同的技术测试自己的移植工作,这里通过以下4个步骤测试移植代码:
(1)确保C编译器、汇编编译器及链接器正常工作;
(2)验证OSTaskStkInit()和OSStartHighRdy()函数;
(3)验证OSCtxSw()函数;
(4)验证OSIntCtxSw()函数。
详细步骤在此就不再赘述,以下给出具体的应用来说明。
6.2 简单应用
当移植代码测试成功后,可以测试一些具体的任务,这些任务可以由简单到复杂,不断的进行测试,从而进一步验证内核的稳定性和系统的性能。
这里建立了一个按键控制蜂鸣器的控制任务,其代码如下[5]:
int main (void)
{
OSInit();/* OS-II 初始化uCOS-II的内核 */
OSTaskCreate( taskBuzzer, (void *)0, GstkBuzzer[TASK_BUZZER_STK_SIZE-1],
TASK_BUZZER_PRIO);/* 初始化启动任务 */
OSStart();/* Start uCOS-II启动uCOS-II */
return(0);
}static void taskBuzzer (void*parg)
{(void)parg;
while(1)
{OSTimeDlyHMSM(0, 0, 0, 100); /* 扫描周期100ms */
switch(keyRead()) /* 读按键值 */
{case 0xFE:/* 只有Key1按下 */
buzzerSound(1000); /* 蜂鸣器以1000Hz频率发声 */
OSTimeDlyHMSM(0, 0, 0, 550); /* 延时550ms */
buzzerQuiet(); /* 关闭蜂鸣器,停止发声 */
break;
case 0xFD: /* 只有Key2按下 */
buzzerSound(1500);/* 蜂鸣器以1500Hz频率发声 */
OSTimeDlyHMSM(0, 0, 0, 550); /*延时550ms */
buzzerQuiet(); /* 关闭蜂鸣器,停止发声 */
break;
default:
break;
}}}
加载后,按下Key1或者Key2分别会使蜂鸣器发出不同频率的声音,说明测试成功,内核能够正常运行。如果测试未成功,要认真找出存在的问题,尤其不能忽略硬件的问题。当然也可以采用其它的测试,如LED灯流水闪烁、串口测试等。
7 结束语
通过对μCOS-II实时操作系统体系结构、运行环境和运行机制以及Cortex-M3内核的移植需求的研究,并正确编写及改写了移植环境的定制与配置,实现了μCOS-II 到Cortex-M3核上的移植。试验表明,移植是成功的,最终实现了移植后的应用。
参考文献:
[1]魏洪兴.嵌入式系统设计师教程[M].北京:清华大学出版社,2006.
[2]Jean J.Labrosse.嵌入式实时操作系统μC/OS-II[M].北京:北京航空航天大学出版社, 2003.
[3]周立功.ARM 微控制器基础与实战[M]. 2版.北京:北京航空航天大学出版社,2005.
[4]关海,冯大政.μCOSII在基于Cortex-M3核的ARM处理器上的移植[J]. 电子科技,2009(3).
[5]广州周立功单片机发展有限公司. 基于群星Cortex-M3的μCOS-II移植模板的使用[M]. 2009.2.