第四讲--ucOS-II内核结构_03讲述.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四讲--ucOS-II内核结构_03讲述

ucOS-II内核结构 临界段(Critical Sections) μC/OS-Ⅱ为了处理临界段代码需要关中断,处理完后再开中断。 μC/OS-Ⅱ定义两个宏(macros) OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()来关中断和开中断,以便避开不同C编译器厂商选择不同的方法来处理关中断和开中断。 这两个宏的定义取决于所用的微处理器,在文件OS_CPU.H中可以找到相应宏定义(每种微处理器都有自己的OS_CPU.H文件)。 任务 一个任务通常是一个无限的循环,而且一个任务的返回参数必须定义成void。 任务完成以后,任务可以调用OSTaskDel()自我删除,μC/OS-Ⅱ不再理会这个任务,任务的代码也不会再运行。 ? 一个无限循环任务的程序 void YourTask (void *pdata) (1) { for (;;) { (2) /* 用户代码 */ 调用uC/OS-II的某种系统服务: OSMboxPend(); /任务进入等待状态 OSQPend(); /任务进入等待状态 OSSemPend(); /任务进入等待状态 OSTaskDel(OS_PRIO_SELF); /任务完成后自我删除 OSTaskSuspend(OS_PRIO_SELF); /任务挂起等待 OSTimeDly(); /延迟一段时间 OSTimeDlyHMSM(); /延迟一段时间 /* 用户代码 */ } } 任务控制块(Task Control Blocks, OS_TCBs) 任务一旦建立,任务控制块OS_TCBs将被赋值。 任务控制块是一个数据结构,全部驻留在RAM中。 当任务的CPU使用权被剥夺时,μC/OS-Ⅱ用它来保存该任务的状态。当任务重新得到CPU使用权时,任务控制块能确保任务从当时被中断的那一点开始继续向下执行。 任务建立的时候,OS_TCBs被初始化。 μC/OS-II任务控制块程序 typedef struct os_tcb { OS_STK *OSTCBStkPtr;/?指向当前任务栈顶的指针,是OS_TCB数据结构中唯一一个能用汇编语言来处置的变量(在任务切换段的代码Context-switching code之中) #if OS_TASK_CREATE_EXT_EN void *OSTCBExtPtr;/指向用户定义的任务控制块扩展,只在函数OstaskCreateExt()中使用,故使用时要将OS_TASK_CREAT_EN设为1,以允许建立任务函数的扩展 OS_STK *OSTCBStkBottom;/指向任务栈底的指针,通过OSTaskCreateExt()函数建立任务时才能实现OSTaskStkChk() 功能,要求是将OS_TASK_CREATE_EXT_EN设为1。 INT32U OSTCBStkSize;/存放栈中可容纳的指针数目而不是用字节(Byte)表示的栈容量总数,在函数OSStakChk()中调用,同样要将OS_TASK_CREAT_EXT_EN设为1。 INT16U OSTCBOpt;/把OS_TASK_OTP_STK_CHK, OS_TASK_OPT_STK_CLR和OS_TASK_OPT_SAVE_FP 三个“选择项”传给OSTaskCreateExt()。 INT16U OSTCBId;/存储任务的识别码,现在暂时没有使用 #endif? /用于任务控制块OS_TCBs的双重链接,该链表在时钟节拍函数OSTimeTick()中使用,用于刷新各个任务的任务延迟变量.OSTCBDly,每个任务的任务控制块OS_TCB在任务建立的时候被链接到链表中,在任务删除的时候从链表中被删除。双重连接的链表使得任一成员都能被快速插入或删除。 struct os_tcb *OSTCBNext; struct os_tcb *OSTCBPrev; #if (OS_Q_

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档