使用uC/OS-II操作系统的短信息电话机
2.3 软件方案
本系统选用μC/OS-II操作系统,将其移植到所选的MCU上。在main中建立一个起始任务
StartTask。
int main (void){
OSInit();
OSTaskCreate((void*)StartTask,(void*)0X00,(OS_STK ) &StartTaskStk[START_TASK_STK_SIZE-1],0);
OSStart();
return 0;
}
起始任务中,首先建立一系列的信号量和邮箱:
Sem_Int_Ring = OSSemCreate(0) ;唤醒振铃任务
Sem_Any_SMTask = OSSemCreate(0) ;唤醒短消息任务
Sem_Int_Keyboard = OSSemCreate(0) ;唤醒键盘任务
Sem_Int_ClockTask = OSSemCreate(0) ;唤醒时钟中断
Mbox_Any_UI= OSMboxCreate((void *)0);唤醒UI任务
Mbox_Int_Hook= OSMboxCreate((void *)0);唤醒摘挂机任
;务
然后,用OSTaskCreate()函数建立6个任务。任务名分别为:HandsetTask(摘/挂机任务)、RingTask(响铃任务)、KeyTask(键盘任务)、SmTask(短消息任务)、UITask(用户界面(UI)任务)、ClockTask(时钟任务)。最后,在起始任务中将它本身删除掉。
(1)摘/挂机任务
当拿起听筒或放下听筒时,就产生中断。在中断中,调用OSMboxPost(Mbox_Int_Hook,Msg_Int_Hook)来唤醒摘/挂机任务,同时清除中断标志。Msg_Int_Hook[0]=0x00为摘机,Msg_Int_Hook[0]=0x01为挂机。
摘/挂机任务不断调用OSMboxPend(Mbox _Int_Hook,0,&err)来获得信箱。获得信箱后,根据Msg_Int_Hook[0]中的值,就知道是摘机还是挂机,然后调用OSMboxPost(Mbox_Any_UI,Msg_Any_UI)来唤醒UI任务。Msg_Any_UI [0]=任务号1,Msg_Any_UI [1]=0x00为摘机,Msg_Any_UI [1]=0x01为
《使用uC/OS-II操作系统的短信息电话机(第2页)》