内核结构学习
一.临界段(Critical Sections)。
代码的临界段也称为临界区。程序执行到临界区时,不允许有中断进入,因此在进入临界区前要关中断,执行完临界区马上开中断。
μC/OS-Ⅱ中的这两个宏调用分别是:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。因为这两个宏的定义取决于所用的微处理器,故在文件OS_CPU.H中可以找到相应宏定义。每种微处理器都有自己的OS_CPU.H文件。51处理器的例子如下:
#define OS_ENTER_CRITICAL() EA=0
#define OS_EXIT_CRITICAL() EA=1
二.任务及任务状态
1.任务是一个无限循环,不返回任何值,因此函数类型为void。如果要退出任务,任务需自我删除,如下:
- void YourTask(void *pdata)
- {
- ....
- OSTaskDel(OS_PRIO_SELF);
- }
2.任务状态:
1.睡眠态(DORMANT)指任务驻留在程序空间之中,还没有交给μC/OS-Ⅱ管理。把任务交给μC/OS-Ⅱ是通过2.调用下述两个函数之一:OSTaskCreate()或OSTaskCreateExt()。
3.等待态(WAITING)指等待某一事件的触发而进入就绪态。
4.就绪态(READY)指在队列中等待的任务,一切就绪,只缺东风——CPU。
5.运行态(RUNNING)指拥有CPU控制权,正在运行的任务。正在运行的任务可以通过调用两个函数之一将自身延迟一段时间,这两个函数是OSTimeDly()或OSTimeDlyHMSM()。正在运行的任务可以通过以下几个函数进入等待态,OSSemPend(),OSMboxPend(),或OSQPend()。
6.中断服务态(ISR)指程序运行处于中断过程,CPU正在处理中断事件。
7.空闲状态。当所有的任务都在等待事件发生或等待延迟时间结束,μC/OS-Ⅱ执行空闲任务(idle task),执行OSTaskIdle()函数。