代码调度,使之定时运行.docVIP

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

这一节将向你介绍如何规划你的新代码块,,使之可以按需运行。实际上在本节内容在本博客《Pixhawk源码笔记二:APM线程》的第6节“AP_Scheduler任务调度系统”中已有讲述,这里再做进一步介绍。如有问题,可以交。新浪长沙@WalkAnt,转载本博客文章,请注明出处,谢谢。 第十一部分 调用代码,使之定时运行 ????????英文参考:/wiki/code-overview-scheduling-your-new-code-to-run-intermittently/ ????????本节源自:http://liung.github.io/blog/apm/2014-09-05-APM-ArduCopter规划新代码使之按一定频率运行.html ? 1、用代码调度器(scheduler)运行你的代码 ????????在给定时间间隔内来运行你的代码的最灵活的方式就是使用调度器。这可以通过将你的函数添加到文件ArduCopter.pde中的scheduler_tasks数组来完成。需要表明的是:实际上该文件中有两个任务列表,上面的任务列表是针对高频CPUs(如Pixhawk),对应的调度频率是400Hz,下面的是针对低频CPUs(如APM2),对应的调度频率是100Hz。 ????????添加一个任务是相当的简单,你只要在列表添加新的一行代码就可以了(列表中位置越靠前意味着拥有更高的级别)。任务项中的第一列代表了函数名,第二列是以2.5ms为单位的数字(或者APM2中以10ms为单位)。所以,如果你想要你的函数执行频率为400Hz,那么该列就需要填写为“1”,如果想要50Hz,那么就需要改为“8”。任务项的最后一列代表该函数预计运行花费的微秒(百万分之一秒)时间。这可以帮助调度器来预估在下一个主循环开始之前有否有足够的时间来运行你的函数。 static const AP_Scheduler::Task scheduler_tasks[] PROGMEM = { ????{ update_GPS,????????????2,?????900 }, ????{ update_nav_mode,???????1,?????400 }, ????{ medium_loop,???????????2,?????700 }, ????{ update_altitude,??????10,????1000 }, ????{ fifty_hz_loop,?????????2,?????950 }, ????{ run_nav_updates,??????10,?????800 }, ????{ slow_loop,????????????10,?????500 }, ????{ gcs_check_input,??????????????2,?????700 }, ????{ gcs_send_heartbeat,??100,?????700 }, ????{ gcs_data_stream_send,??2,????1500 }, ????{ gcs_send_deferred,?????2,????1200 }, ????{ compass_accumulate,????2,?????700 }, ????{ barometer_accumulate,??2,?????900 }, ????{ super_slow_loop,?????100,????1100 }, ????{ my_new_function,??????10,?????200 }, ????{ perf_update,????????1000,?????500 } }; 2、作为循环的一部分运行你的代码 ????????为了代替在代码调度器中加入一个新的函数入口,你还可以在现有的任何时间循环事件中添加你的函数。除了在fast-loop循环中添加外,这种方法对比起上面的代码调度器方法并没有什么实质性好处。但当你的代码添加到fast-loop循环中时,就意味着它将以最高的优先级别来执行(它几乎能100%达到所确保的400hz运行速度)。 fast_loop:APM2上运行频率100hz,Pixhawk上400Hz fifty_hz_loop:运行频率50hz ten_hz_logging_loop:运行频率10hz three_hz_loop:运行频率3.3hz on_hz_loop:运行频率1hz ????????所以举个例子,如果你想让你的代码运行频率为10hz,那么你就要将它添加到ArduCopter.pde文件的ten_hz_logging_loop()函数声明中。 // ten_hz_logging_loop // should be run

文档评论(0)

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

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

版权声明书
用户编号:6203200221000001

1亿VIP精品文档

相关文档