Ucos-II基础原理讲解,任务创建与中断问题.docVIP

Ucos-II基础原理讲解,任务创建与中断问题.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Ucos-II基础原理讲解,任务创建与中断问题

2013-6-26 周三 Haibara AI Ucos-II在移植过程中的特性,首先要理解所加入的实时操作系统是一个给予定时器节拍的系统。怎么理解这个问题呢,由该定时器产生脉冲来驱动不同的任务调度,且由于该系统是基于可剥夺内核类型,任务之间的切换时间间隔也由该定时器完成。不宜过大,否则会造成CPU利用率不高,不宜过小,否则会造成CPU在执行任务时非常被动,时间特别赶。就想人的心脏一样,动力是固定的,你非要去跑个100公里,心脏不加速你是会窒息而死的。我们正常心脏跳动是60次左右,同样,单片机也需要一个这样的相对宽松的节拍驱动。 注:众所周知,脉冲本质上仍由晶振提供(或实时时钟),原理都一样,再次请各位不要较真,就暂时以晶振为例。大家可以考虑一下,晶振的作用是否特别类似于人体的心脏呢?答案是很显然的。心脏跳动给人体提供输送血液和养料的压力,晶振的设计原理也正是源于此。他可以像人体心脏一样提供动力输送各个外设(相当于人体器官)所需要的能量。说这么多,就是要大家理解,人可以实时做出反应,因为人是有生命的,也就是他有反应、判断和处理能力,可以决定什么时间应该做什么。但是单片机是没有生命的,换句话说,他所谓的处理能力源于人们的代码和程序。那么,怎么让单片机像人一样拥有生命呢?答案很简单,给他指令,帮助他决定什么时间该做什么,这也就是所谓的实时操作系统。不只是ucos,其他实时操作系统也是这个道理。 下面我以代码为例,讲述一下ucos的工作流程,如有错误,还请各位前辈指点。 首先任务是怎么样开始执行的? os_err = OSTaskCreateExt((void (*)(void *)) App_TaskStart, */1 (void * ) 0, 2 (OS_STK * )App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],3 (INT8U ) APP_TASK_START_PRIO,4 (INT16U ) APP_TASK_START_PRIO,5 (OS_STK * )App_TaskStartStk[0],6 (INT32U ) APP_TASK_START_STK_SIZE,7 (void * )0,8 (INT16U )(OS_TASK_OPT_STK_CLR | OS_TASK_OPT_STK_CHK));9 这个东西好像是非常复杂,但是实际上并不需要细究(当然非要细究也是允许的,只不过是C语言而已,看也不是看不懂,对于初学者而言并不推荐而已)。这块并不复杂,我就不再细究,如果还是不懂,就去度娘那问一下。(输入ucosii系统任务库函数解析) 有必要说一下的是,上述App_TaskStart是系统创建的第一个实质性任务,为什么这么说呢,可以说系统上电后直接跳转main函数体,但是真正起作用的是这句引导任务也就是App_TaskStart。如果说main是皇帝,App_TaskStart这孩子就是摄政王。 App_TaskStart函数体下可以并行的创建任务。 static void App_TaskStart (void *p_arg) { INT8U os_err; (void)p_arg; /*************** Init hardware ***************/这句不需要细究,用什么功能都要初始化相应外设,按照时钟-------IO------外设级 一级一级初始化 GPIO_Configuration(); OS_CPU_SysTickInit(); //实际上就像裸机环境下的时钟配置,目前吧任务都交给了operate system也就是OS,肯定要把大权交给它 USART1_Configuration(); //这是我配置的系统中断外设级初始化 NVIC_Configurat

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档