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

在官方给的

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值