欢迎来到天天文库
浏览记录
ID:27659713
大小:71.95 KB
页数:6页
时间:2018-12-03
《px4源码开发人员文档(四)创建后台程序(应用)》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、在Unix和其他多任务计算机操作系统屮,后台程序足指,作为后台进积运行的计算机,而不是由交互用户直接控制。后台程序概念的主耍好处是,后台程序讨以直接启动,时不需耍将其发送到精确的用户或者shell的后台(然而,这不适川于Nuttx),其状态可以在运行的吋候,通过shell查询。也可以终止。Step1:创建一个小的标准应用根掘FirstOnboardApplicationTutorial(HelloSky)教程(见PX4源码开发人员文們(二)),这是一个葙本程序(简化):o1234567891[cp
2、p]viewplaincopy_EXPORTintpx4_daemon_app_main(intargc,char*argv[]);鮝•intpx4一daemon_app—main(intargc,char*argv[]){while(true){warnx("HelloDaemon!11);sleep⑴;}return0;}这个应用的问题非常明显,如果不使用&启动,将会阻塞shell(Nuttx,并不如此,并且会出于smallfootprint和可靠性的原因,支持CTRL-Z/fg/bg)。
3、为了回避这个问题,K而部分将应用转换为一个后台程序。Step2:创建后台进程管理函数主函数A后台进程管理函数替代,in的上函数的内界现在位于后台任务/进程屮[cpp]viewplaincopy1.#includeI2._EXPORTintpx4—daemon_app_main(intargc,char*argv[]);intmavlink_thread_main(intargc^char*argv[]);番•intmavlink_thread_main
4、(intargc,char*argv[]){while(true){warnx(,lHelloDaemon!11);sleep⑴;if(thread_should_exit)break;}return0;}•拳intpx4_daemon_app_main(intargc,char*argv[]){if(argc<1)usage("missingcommand");if(!strcmp(argv[l],"start")){if(thread^running){warnx("daemonalrea
5、dyrunning");/*thisisnotanerror*/exit(0);}threadshouldexit=false:daemon_task=task—spawn_cmd("daemon",SCHED_RR,SCHED_PRIORITY_DEFAULT,4096,px4_daemon_thread_main?(argv)?(constchar**)&argv[2]:(constchar**)NULL);thread_running=true;exit(0);}usage("unrec
6、ognizedcommand");exit(l);[plain]viewplaincopyLpx4—daemon_appstart上面的代码没奋报告状态,并且没右对多次调后台进程进行保护。Step3:添加停止/状态指令以及安全保护砧哲合适的启动/停止/状态逮立和附加安全侃扩的完整px4_daemon^app代码如下:[cpp]viewplaincopy1/**1.*@filepx4_daemon_app.c2.*daemonapplicationexampleforPX4autopilot3.*4
7、.*^authorExampleUser5.*/7.6.#include7.#include8.#include9.#include12.10.#include11.#include15.12.#include13.#include18.14.sta
8、ticboolthread—should_exit=false;/**
此文档下载收益归作者所有