- 1、本文档共1214页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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中),代码如
您可能关注的文档
- 教学课件 《Flash动画设计案例教程》--牛雪婷.ppt
- 教学课件 英语影视作品赏析(董晓波).ppt
- 教学课件 《3G无线网络规划与优化》.ppt
- 教学课件 商务英语写作教程--陈振东.ppt
- 教学课件 现代操作系统与网络服务管理.ppt
- 教学课件 MCS-51单片机原理及嵌入式系统应用(王忠飞).ppt
- 教学课件 国际贸易理论与实务(英文版)(第四版).ppt
- 教学课件 个人理财--侯志铭.ppt
- 教学课件 Oracle数据库应用教程(朱亚兴).ppt
- 教学课件 MATLAB 8.X程序设计及典型应用(张霞萍).ppt
- 案例详解数据表p 5538f9f1 ahu.pdf
- 章政策结多项选择题宏观济学chtb.pdf
- 联机教程建议先看一下.pdf
- 安康市汉滨区电缆线路整治查修工程.pdf
- 文稿教程说明mtz0 xx swahili ab initio paper 1 sl markscheme.pdf
- 免疫分析法质量要求.pdf
- review questions of the circulatory system循环系统复习题.pdf
- sfc上影城百联滨江店.pptx
- sigma-sml共7 aldrich安全数据表.pdf
- 学习draw conclusions 2 process activity得出结论过程.pdf
文档评论(0)