概述
在官方给的
http://ardupilot.org/dev/docs/learning-ardupilot-the-example-sketches.html
这个教程中,理应看到的是终端打印出一系列的GPS值,可是我在编译烧写成功后终端无法输出任何信息。详细阅读了ArduPilot的底层代码后终于找到了原因。
原代码(注为了表达主要问题对代码进行了省略):
/// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- /* simple hello world sketch Andrew Tridgell September 2011 */ #include <AP_HAL/AP_HAL.h> const AP_HAL::HAL& hal = AP_HAL::get_HAL(); void setup() {
hal.console->println("GPS AUTO library test"); } void loop() {
hal.console->println("hello world!"); hal.scheduler->delay(1000); } AP_HAL_MAIN();
修改后代码
#include <AP_HAL/AP_HAL.h>
const AP_HAL::HAL& hal = AP_HAL::get_HAL();
class GPS_AUTO_test: public AP_HAL::HAL::Callbacks{ public: void setup() { hal.console->println("GPS AUTO library test"); } void loop() { hal.console->println("hello world!"); hal.scheduler->delay(1000); } }; GPS_AUTO_test gat; // Register above functions in HAL board level AP_HAL_MAIN_CALLBACKS(&gat);
在执行AP_HAL_MAIN_CALLBACKS(&gat)后,程序会自动调用gat.setup()和gat.loop()。
执行结果:
其实AP_HAL_MAIN_CALLBACKS(&gat)和AP_HAL_MAIN()两个宏的实现方式差不多,后者会将setup和loop组装成一个类后再使用前者的方式。我读了源码也没有发现什么问题,可是的确无法执行,所以最好的方法是把setup和loop封装到一个类里后采用AP_HAL_MAIN_CALLBACKS(&gat)的形式。
注意,封装成的类要继承public AP_HAL::HAL::Callbacks类。
转载于:https://www.cnblogs.com/silverbulletmdc/p/5406563.html
最后
以上就是感动盼望为你收集整理的Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法的全部内容,希望文章能够帮你解决Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复