libraries目录

传感器

AP_InertialSensor 惯性导航传感器 就是陀螺仪加速计

AP_Baro 气压计 居然支持BMP085 在我印象中APM一直用高端的MS5611

AP_Compass 指南针

AP_GPS GPS定位

还有些飞行姿态的

AP_ARHS 姿态解算 输出Roll Yaw Pitch

AP_AttitudeControl 姿态控制 APM飞这么稳就靠它了

硬件抽象层

AP_HAL 头文件

AP_HAL_AVR APM2.X时代的板子 ATMega2560处理器

AP_HAL_FLYMAPLE 好几年前中国一个团队出的基于Maple(STM32版Arduino)飞控

          从硬件规格上STM32RET6 ITG3205 ADXL345

          HMC5883 BMP085 按理说挺有发展前景 但不知怎么没了下文

AP_HAL_Linux 基于嵌入式Linux的飞控 有树莓派加扩展板 uavio+ 国内的raspilot

        BeagleBoard加扩展板Erle Brain 2

        也有商品飞行器Parrot Bebop Drone

        应该是目前最有发展前景的平台。

AP_HAL_PX4 Pixhawk 目前主推的平台 用料足 价格贵 不亚于上面Linux的那种 性价比不高

AP_HAL_SITL 模拟器 不用买硬件直接在电脑上模拟

了解示例代码GPS_AUTO_test

  • 定义hal变量作为引用
  • 代码粗糙缺乏注释
  • setup() loop()函数 和arduino一样

hal引用

每一个用到HAL层的文件都需要hal变量 它获得AP_HAL::HAL对象,提供所有硬件特性的调用,包括打印消息到控制台,睡眠,I2C和SPI总线

实际的hal实现都在AP_HAL_XXX库中

常用hal方法有(类似arduino)

  • hal.console->printf() hal.console->printf_P() 打印消息到控制台(_P在avr上能节约内存)
  • hal.scheduler->millis() hal.scheduler->micros() 启动时间
  • hal.scheduler->delay() hal.scheduler->delay_microseconds() 延迟指定时间
  • hal.gpio->pinMode() hal.gpio->read() hal.gpio->write() 设置 读写gpio
  • hal.i2c I2C访问
  • hal.spi SPI访问

AP_HAL_MAIN 宏

做一些HAL层的初始化 通常不用关心它的具体实现

Hello World

比上面的还简单 建立目录\libraries\AP_HelloWorld\examples\HelloWorld_test

建立三个文件

HelloWorld_test.cpp

#include <AP_HAL/AP_HAL.h>

const AP_HAL::HAL& hal = AP_HAL::get_HAL();

void setup()
{
hal.console->println("Hello World");
} void loop()
{
hal.scheduler->delay();//必须延时 不然上面的println都不会执行
} AP_HAL_MAIN();

make.inc

LIBRARIES += AP_HelloWorld

只编译当前库

Makefile

include ../../../../mk/apm.mk

可以从GPS_AUTO_test复制

开始编译

make linux -j4

运行

sudo ./HelloWorld_test.elf

最后分享下WalkAnt大神的源码分析 http://blog.sina.com.cn/s/blog_402c071e0102v59r.html

APM代码学习笔记1的更多相关文章

  1. APM代码学习笔记2:编译过程

    make编译 所有位置的Makefile 引用的都是/mk/apm.mk target.mk 设置CONFIG_HAL_BOARD 例如linux就是HAL_BOARD_LINUX environ.m ...

  2. APM代码学习笔记3:执行过程

    以Linux平台ArduPlane为例 \ArduPlane\Plane.cpp 定义Plane类 继承自AP_HAL::HAL::Callbacks ,获取hal对象. \ArduPlane\Ard ...

  3. Learning Memory-guided Normality代码学习笔记

    Learning Memory-guided Normality代码学习笔记 记忆模块核心 Memory部分的核心在于以下定义Memory类的部分. class Memory(nn.Module): ...

  4. DeepLearnToolbox-master代码学习笔记

    卷积神经网络(CNN)博大精深,网上资料浩如烟海,让初学者无从下手.笔者以为,学习编程还是从代码实例入们最好.目前,学习CNN最好的代码实例就是,DeepLearnToolbox-master,不用装 ...

  5. C# 好代码学习笔记(1):文件操作、读取文件、Debug/Trace 类、Conditional条件编译、CLS

    目录 1,文件操作 2,读取文件 3,Debug .Trace类 4,条件编译 5,MethodImpl 特性 5,CLSCompliantAttribute 6,必要时自定义类型别名 目录: 1,文 ...

  6. 1.JAVA中使用JNI调用C++代码学习笔记

    Java 之JNI编程1.什么是JNI? JNI:(Java Natibe Inetrface)缩写. 2.为什么要学习JNI?  Java 是跨平台的语言,但是在有些时候仍然是有需要调用本地代码 ( ...

  7. boost timer代码学习笔记

    socket连接中需要判断超时 所以这几天看了看boost中计时器的文档和示例 一共有五个例子 从简单的同步等待到异步调用超时处理 先看第一个例子 // timer1.cpp: 定义控制台应用程序的入 ...

  8. cc代码学习笔记1

    #define #define INT32 int #define INT8 char #define CHAR char #define SSHORT signed short #define IN ...

  9. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

随机推荐

  1. SqlServer2008 数据库可疑

    今天遇到数据库可疑,以前都是直接删了还原,这次没有最新的备份文件,一起看看脚本怎么解决 --最好一句句执行,方便看到错误 USE MASTER GO --开启数据库选项"允许更新" ...

  2. WindowsService服务程序开发

    Windows服务:Microsoft Windows 服务(即,以前的 NT服务)使您能够创建在它们自己的 Windows 会话中可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可 ...

  3. 关于EJB 时间注解与oracle数据库时间格式

    EJB中Temporal是时间注解,其中TemporalType是时间注解的枚举类型其中包括 TemporalType类型,请看源码/*** Type used to indicate a speci ...

  4. [C++基础]在构造函数内部调用构造函数

    看下面的面试题: #include <iostream> using namespace std; struct CLS { int m_i; CLS( int i ) : m_i(i){ ...

  5. [C#参考]Struct结构体

    结构体是一种简单的用户自定义类型,也是类的一种轻量级的替代品. 相似之处:他们都有构造函数.属性.方法.字段.操作符.嵌套类型和索引器. 差异之处:类是一种引用类型,而结构体是一种值类型.因此结构体一 ...

  6. C/C++中的far和near两个指针

    Dos 的设计是基于16位的CPU的,也就是CPU中的每个寄存器(Register)只有16位,只能存放0-65535(64K)的值.为了能访问大于64K的内存,人们用了分段的方法,用两个16位的数来 ...

  7. 幻世(OurDream)2D图形引擎大更新——炫丽粒子特效强势回归!

    本次更新终于让各位期待已久的绚丽粒子系统特效强势回归到幻世当中了.凭借新引擎强大而又高效的绘图,新的粒子系统将比旧有版本(原Ycnd 2D)在性能上有极大幅度的增强,增幅超过十倍! 更强的性能!更好的 ...

  8. Python进阶之匿名函数(关键词lambda)

    匿名函数 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB"," ...

  9. Flink资料(8) -- Flink代码贡献的指导及准则

    本文翻译自Contributing Code ----------------------------------------- Apache Flink是由自愿的代码贡献者维护.优化及扩展的.Apa ...

  10. redsocks 设置全局代理

    分享一下我的经验, http://lilydjwg.is-programmer.com/2014/2/7/linux-really-global-http-proxy.42701.html 1. 优点 ...