欢迎来到天天文库
浏览记录
ID:48722268
大小:1.32 MB
页数:40页
时间:2020-01-20
《2 uCOS-Ⅱ内核结构.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本节提要1324实时操作系统基本概念C/OS-Ⅱ内核结构C/OS-Ⅱ移植移植实例分析μC/OS-Ⅱ是怎样处理临界段代码的;怎样写中断服务子程序;什么是任务,怎样把用户的任务交给μC/OS-Ⅱ;任务是怎样调度的;什么是时钟节拍,μC/OS-Ⅱ是怎样处理时钟节拍的;μC/OS-Ⅱ是怎样初始化的,以及怎样启动多任务应用程序CPU的利用率是多少,μC/OS-Ⅱ是怎样知道的;C/OS-Ⅱ内核结构需要思考的几个问题:OS_CRITICAL_METHOD==1用处理器指令关中断,执行OS_ENTER_CRITIC
2、AL(),开中断执行OS_EXIT_CRITICAL();OS_CRITICAL_METHOD==2实现OS_ENTER_CRITICAL()时,先在堆栈中保存中断的开/关状态,然后再关中断;实现OS_EXIT_CRITICAL()时,从堆栈中弹出原来中断的开/关状态;OS_CRITICAL_METHOD==3把当前处理器的状态字保存在局部变量中(如OS_CPU_SR,关中断时保存,开中断时恢复。和其它内核一样,μC/OS-Ⅱ为了处理临界段代码需要关中断,处理完毕后再开中断。这使得μC/OS-Ⅱ能够避免同
3、时有其它任务或中断服务进入临界段代码。临界段(CriticalSections)任务(task)典型的任务一个无限循环。voidmytask(void*pdata){for(;;){dosomething;waiting;dosomething;}}C/OS–II2.5版本支持64个任务,每个任务一个特定的优先级。优先级越高,数字越小。系统占用了8个任务,保留优先级为0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_
4、PRIO-0。μC/OS-Ⅱ总是运行进入就绪态的优先级最高的任务。目前版本的μC/OS-Ⅱ中,任务的优先级号就是任务编号(ID)优先级号(或任务的ID号)也被一些内核服务函数调用,如改变优先级函数OSTaskChangePrio(),以及任务删除函数OSTaskDel()。任务(task)任务状态睡眠态任务就绪态任务运行态任务中断服务态任务等待状态任务OSTaskCreate()OSTaskCreateExt()OsTaskDel()OSMBoxPost()OSQPost()OSSemPost()OSTa
5、skResume()OSTimeDlyResume()OSTimeTick()OSMBoxPend()OSQPend()OSSemPend()OSTaskSuspend()OSTimeDly()OSTimeDlyHMSM()OS_TASK_SW()OSIntExit()OSStart()TaskispreemptedOsTaskDel()OsTaskDel()InterruptOsIntExit()OSSched()任务控制块(TCB)任务控制块OS_TCB是一个数据结构,保存该任务的相关参数,包括任务堆
6、栈指针,状态,优先级,任务表位置,任务链表指针等。所有的任务控制块分为两条链表,空闲链表和使用链表。µC/OS-II任务控制块typedefstructos_tcb{OS_STK*OSTCBStkPtr;#ifOS_TASK_CREATE_EXT_EN>0void*OSTCBExtPtr;OS_STK*OSTCBStkBottom;INT32UOSTCBStkSize;INT16UOSTCBOpt;INT16UOSTCBId;#endifstructos_tcb*OSTCBNext;structos_tc
7、b*OSTCBPrev;#if(OS_Q_EN&&(OS_MAX_QS>=2))
8、
9、OS_MBOX_EN
10、
11、OS_SEM_ENOS_EVENT*OSTCBEventPtr;#endif#if(OS_Q_EN&&(OS_MAX_QS>=2))
12、
13、OS_MBOX_ENvoid*OSTCBMsg;#endifINT16UOSTCBDly;INT8UOSTCBStat;INT8UOSTCBPrio;INT8UOSTCBX;INT8UOSTCBY;INT8UOSTCBBitX;INT8UOSTCBBitY;#ifO
14、S_TASK_DEL_ENBOOLEANOSTCBDelReq;#endif}OS_TCB;µC/OS-II任务控制块任务控制块OS_TCB中几个成员的算法OSTCBY=priority>>3;OSTCBBitY=OSMapTbl[priority>>3];OSTCBX=priority&0x07;OSTCBBitX=OSMapTbl[priority&0x07];任务控制块初始化函数INT8UOS_TCBInit(INT8U
此文档下载收益归作者所有