昨天从图书馆借的书,果然如传说中讲的很透彻,希望这个礼拜能看完吧。
第2章 μC/OS-II中的任务
2.1 任务的基本概念15
2.1.1 任务的状态17
2.1.2 用户任务代码的一般结构18
2.1.3 系统任务20
2.1.4 任务的优先权及优先级别21
2.2 任务堆栈21
2.2.1 任务堆栈的创建22
2.2.2 任务堆栈的初始化24
2.3 任务控制块及任务控制块链表25
2.3.1 任务控制块的结构25
2.3.2 任务控制块链表26
2.3.3 任务控制块的初始化28
2.4 任务就绪表及任务调度29
2.4.1 任务就绪表的结构29
2.4.2 对任务就绪表的操作31
2.4.3 任务的调度32
2.5 任务的创建37
2.5.1 用函数OSTaskCreate()创建任务37
2.5.2 用函数OSTaskCreateExt()创建任务39
2.5.3 创建任务的一般方法39
2.6 任务的挂起和恢复46
2.6.1 挂起任务46
2.6.2 恢复任务47
2.7 其他任务管理函数53
2.7.1 任务优先级别的修改53
2.7.2 任务的删除53
2.7.3 查询任务的信息60
2.8 μC/OS-II的初始化和任务的启动60
2.8.1 μC/OS-II的初始化60
2.8.2 μC/OS-II的启动62
2.9 一个示例64
2.10 小结72
1. 堆栈:在存储器中按数据“后进先出(LIFO)”的原则组织的连续存储空间。
任务堆栈的创建
typedef unsigned int OS_STK; //该类型长度为16位
#define TASK_STK_SIZE 512 //定义堆栈的长度(1024字节)
OS_STK TaskStk[TASK_STK_SIZE]; //定义一个数组来作为任务堆栈
任务堆栈的初始化
OS_STK*OSTaskStkInit(...)
2. 任务控制块(OS_TCB)是一个结构类型数据。用来记录任务的堆栈指针、任务的当前状态、任务的优先级别等一些与任务管理有关的属性。
OS_STK *OSTCBStkPtr; //指向任务堆栈栈顶的指针
INT16U OSTCBDly; //任务等待的时限(节拍数)
INT8U OSTCBStat; //任务的当前状态标志
INT8U OSTCBPrio; //任务的优先级别
3. 任务控制块链表:空任务块链表和任务块链表。
OS_TCBTbl[ ]: OS_TCB*类型,每个数组元素是一个任务控制块。
OSTCBFreeList:空任务控制块链表头指针。
OSTCBList: 任务控制块链表头指针。
OSTCBCur: 正在运行任务控制块的指针。
OSPrioCur: 正在运行任务的优先级别。
OSTCBPrioTbl[ ]:保存控制块指针的数组。
任务控制块的初始化:
INT8U OSTCBInit(...)
4. 任务就绪表: 类型为INT8U的数组OSRdyTbl[ ]。
任务组: 类型为INT8U的变量OSRdyGrp。
优先级别: prio=(0xD5D4D3D2D1D0).
OSRdyTbl[D5D4D3]的(0xD2D1D0)位上置1。
OSRdyGrp的(D5D4D3)位上置1。
5. 任务的调度:两项工作,一是在任务就绪表中查找具有最高优先级别的就绪任务;二是实现任务的切换。
有两种调度器,任务级的调度器由OSSched()来实现,中断级的调度器由OSIntExt()来实现。
P33任务级调度器OSSched()的源代码。
6. OSTaskDelReq():请求删除任务函数,是请求删除方和被删除方的联络信号。
任务请求删除优先级别为44的任务,那么完成这个任务的代码段为:
while(OSTaskDelReq(44)!=OS_TASK_NOT_EXIST)
{
OSTimeDly(1); //延时1个时钟节拍
}
被删除任务方调用函数OSTaskDelReq()的典型代码段如下:
if(OSTaskDelReq(OS_PRIO_SELF)==OS_TASK_DEL_REQ)
{
//释放资源和动态内存的代码
OSTaskDel(OS_PRIO_SELF);
}
else
{
//其他应用代码
}
7. P61表,初始化之后各全局变量的情况。
文章评论(0条评论)
登录后参与讨论