- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
班 级 学号 姓 名 同组人
实验日期 室温 大气压 成 绩
实验二 UCOS-II任务管理
一、实验目的
1、掌握UCOS-II中任务管理的函数的应用。
2、掌握UCOS-II在STM32平台下对硬件的控制。
3、掌握开发UCOS-II应用的程序结构。
二、实验步骤
1、UCOSII工作原理
UCOSII提供系统时钟节拍,实现任务切换和任务延时等功能。这个时钟节拍由OS_TICKS_PER_SEC(在os_cfg.h中定义)设置,一般我们设置UCOSII的系统时钟节拍为1ms~100ms。本次实验利用STM32的SYSTICK定时器来提供UCOSII时钟节拍。
UCOSII的任何任务都是通过一个叫任务控制块(TCB)的东西来控制的,每个任务管理块有3个最重要的参数:(1)任务函数指针;(2)任务堆栈指针;(3)任务优先级。
在UCOSII中,使用CPU的时候,优先级高(数值小)的任务比优先级低的任务具有优先使用权,即任务就绪表中总是优先级最高的任务获得CPU使用权,只有高优先级的任务让出CPU使用权(比如延时)时,低优先级的任务才能获得CPU使用权。UCOSII不支持多个任务优先级相同,也就是每个任务的优先级必须不一样。任务的调度其实就是CPU运行环境的切换,即:PC指针、SP指针和寄存器组等内容的存取过程
UCOSII的每个任务都是一个死循环。每个任务都处在以下5种状态之一的状态下,这5种状态是:睡眠状态、就绪状态、运行状态、等待状态(等待某一事件发生)和中断服务状态。
睡眠状态,任务在没有被配备任务控制块或被剥夺了任务控制块时的状态。
就绪状态,系统为任务配备了任务控制块且在任务就绪表中进行了就绪登记,任务已经准备好了,但由于该任务的优先级比正在运行的任务的优先级低,还暂时不能运行,这时任务的状态叫做就绪状态。
运行状态,该任务获得CPU使用权,并正在运行中,此时的任务状态叫做运行状态等待状态,正在运行的任务,需要等待一段时间或需要等待一个事件发生再运行时,该任务就会把CPU的使用权让给别的任务而使任务进入等待状态。
中断服务状态,一个正在运行的任务一旦响应中断申请就会中止运行而去执行中断服务程序,这时任务的状态叫做中断服务状态。
UCOSII任务的5个状态转换关系如图所示:
与任务相关的几个函数:
1)建立任务函数
UCOSII提供了我们2个建立任务的函数:OSTaskCreat和OSTaskCreatExt,我们一般用OSTaskCreat函数来创建任务,该函数原型为:
OSTaskCreate(void(*task)(void*pd),void*pdata,OS_STK*ptos,INTU prio)
该函数包括4个参数:
task:是指向任务代码的指针;
pdata:是任务开始执行时,传递给任务的参数的指针;
ptos:是分配给任务的堆栈的栈顶指针;
prio是分配给任务的优先级。
每个任务都有自己的堆栈,堆栈必须申明为OS_STK类型,并且由连续的内存空间组
成。可以静态分配堆栈空间,也可以动态分配堆栈空间。OSTaskCreatExt也可以用来创建任务。
2)任务删除函数
任务删除,就是把任务置于睡眠状态,并不是把任务代码给删除了。UCOSII提供的任务删除函数原型为:INT8U OSTaskDel(INT8U prio)
其中参数prio就是我们要删除的任务的优先级。
故该函数是通过任务优先级来实现任务删除的。
3)请求任务删除函数
必须确保被删除任务的资源被释放的前提下才能将其删除,所以我们通过向被删除任务发送删除请求,来实现任务释放自身占用资源后再删除。UCOSII提供的请求删除任务函数原型为:INT8U OSTaskDelReq(INT8U prio)
同样还是通过优先级来确定被请求删除任务。
4)改变任务的优先级函数
UCOSII在建立任务时,会分配给任务一个优先级,但是这个优先级并不是一成不变
的,而是可以通过调用UCOSII提供的函数修改。UCOSII提供的任务优先级修改函数原型
为:INT8U OSTaskChangePrio(INT8U oldprio,INT8U newprio)。
5)任务挂起函数
任务挂起和任务删除有点类似,但是又有区别,任务挂起只是将被挂起任务的就绪标志删除,并做任务挂起记录,并没有将任务控制块任务控制块链表里面删除,也不需要释放其资源,而任务删除则必须先释放被删除任务的资源,并将被删除任务的任务控制块也给删了。被挂起的任务,在恢复(解挂)后可以继续运行。UCOSII提供的任务
文档评论(0)