码迷,mamicode.com
首页 > 其他好文 > 详细

Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法

时间:2016-04-19 06:06:38      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

在官方给的

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类。

Pixhawk上烧写ardupilot教程中的例程后飞控不工作的解决方法

标签:

原文地址:http://www.cnblogs.com/silverbulletmdc/p/5406563.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!