网站大量收购闲置独家精品文档,联系QQ:2885784924

教学课件 uCOOS-II原理与ARM应用程序设计(张勇).ppt

教学课件 uCOOS-II原理与ARM应用程序设计(张勇).ppt

  1. 1、本文档共1214页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
图7-3 串口调试助手显示信息窗口 7.1.2 工程ex7_1注解  文件appfun.c中函数AppTask_2的内容如下:   1 void AppTask_2(void *pdata)   2 {   3 INT8U err;   4 INT8U i;   5   6 INT32U tickCur; //Timeticks current val   7 INT8U *pmsg; //a block   在文件app.h末尾(参考第6.2.1节)定义了两个定时器变量FeedDogTmr和LedTmr。任务2第21行中调用OSTmrStateGet获得FeedDogTmr定时器的状态。任务2第一次执行时返回状态值为OS_TMR_STATE_UNUSED(第24行),表明定时器FeedDogTmr没有创建,则第25~31行创建该定时器。创建成功后,第32~37行显示该定时器已被创建,参看图6-5。   然后,跳到第50行执行,获得当前时钟节拍值。如果该值小于30秒,则第51行为真,于是,第54行调用OSTmrStateGet获得LedTmr定时器的状态。任务2第一次执行时,返回值为OS_TMR_STATE_UNUSED(第57行),表示定时器LedTmr没有创建,则第58~64行创建该定时器。创建成功后,第65~71输出LedTmr被成功创建的信息,参看图6-5。   间隔2秒(第144行)后再次进入任务2,第21行的返回值为OS_TMR_STATE_STOPPED,即第39行为真,将执行第40~47行的代码,即调用OSTmrStart启动定时器FeedDogTmr。然后,调用OSTmrNameGet获得定时器FeedDogTmr的名称,输出该定时器被成功启动的信息,参看图6-5。   接着,跳至第50行获得当前时钟节拍值,此时,该节拍值约为200,故执行第51~82行的代码。第54行将返回OS_TMR_STATE_STOPPED值,所以,第73~80行的代码被执行,即启动定时器LedTmr(第73行)。然后,获得LedTmr定时器的名称(第76行),进而输出该定时器成功启动的信息,参看图6-5。   再延时2秒(第144行)后返回任务2,此时由于定时器FeedDogTmr已启动,第21行执行后的返回值不是OS_TMR_ STATE_UNUSED和OS_TMR_STATE_STOPPED,而是OS_TMR_STATE_RUNNING,所以第24~48行的代码得不到执行。之后的所有时间内这些代码都不再得到执行权了。同样道理,在小于30秒内,第57~80行的代码也得不到执行了。   当程序运行时间小于50秒而大于30秒时,第84~91行的代码得到执行,这里调用OSTmrRemainGet函数获得定时器LedTmr剩余的计数值,并输出到串口调试助手。   当程序运行时间大于50秒而小于70秒时,第93~111行的代码得到执行,这里将判断LedTmr是否启动,如果启动,则停止第95~102行;然后,第103行判断LedTmr是否停止,如果停止,则删除它。第93~111行的这段程序就是先停止定时器LedTmr,然后再删除它,这段代码在这段时间内只会被执行一次,因为第95和103行只可能有一次为真。   第112~143行重复第51~82行的代码,即重新创建LedTmr定时器,然后再开启它。   第149~153行是当定时器FeedDogTmr启动后,每隔1秒会给变量WTCNT赋以0即所谓的“喂狗”。WTCNT为看门狗定时器的计数寄存器。   第156~159行是当定时器LedTmr启动后,每隔1秒三个LED灯会闪烁一次。由于第50~90秒间定时器停止或删除了,这段时间内三个LED灯不会闪烁。因为任务2启动定时器LedTmr需要2秒,定时时间初值为1秒,所以,程序开始运行的3秒内LED灯不会闪烁。同理,由于任务2启动定时器FeedDogTmr的时间也是2秒,并且,它的定时初值是1秒,所以,看门狗的“狗吃食”周期必须在3秒以上,在startup.s中设为10秒。   工程ex6_2使用了7个定时器相关的函数,还有一个函数,即OSTmrSignal没有使用,该函数是最重要的一个函数,用于刷新定时器的值。在os_cfg.h中宏定义了常量OS_TMR_CFG_TICKS_PER_SEC为10,即每10个时钟节拍刷新一次定时器的计数值。因此,OSTmrSignal必须每10个时钟节拍被调用一次。这个调用位于os_cpu_c.c文件中的第444行(函数OSTimeTickHook中),代码如

文档评论(0)

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

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

版权声明书
用户编号:7201060146000004

1亿VIP精品文档

相关文档