文档章节

第二章第二节——示例梗概

验尸医生
 验尸医生
发布于 2016/03/23 10:39
字数 644
阅读 18
收藏 0

第二章第二节——示例梗概

飞控开发

在探索自己的代码的第一个步骤是使用示例梗概的库。作为一个开始,你应该阅读,构建和运行以下库:
• libraries/AP_GPS/examples/GPS_AUTO_test
• libraries/AP_InertialSensor/examples/INS_generic
• libraries/AP_Compass/examples/AP_Compass_test
• libraries/AP_Baro/examples/BARO_generic
• libraries/AP_AHRS/examples/AHRS_Test
了解示例梗概代码,当你正在阅读的示例梗概代码(如GPS_AUTO_test代码),你会发现几件事情,似乎有些别扭。
• the pde file has a lot of includes
• it declares a ‘hal’ variable as a reference
• the code is quite rough and not well commented
• the setup() and loop() functions

1、include文件

pde文件转变为C++文件后,提供必要的库引用支持。

2、hal引用声明

定义如下:
const AP_HAL::HAL& hal = AP_HAL_BOARD_DRIVER;
& 是 C++ 标准的定义类型:引用。
引用有些像C/C++里的指针,但是比指针可读性要好,而且必须初始化时赋值,赋值后不能再引用其他变量。定义hal为const引用类型的好处是作为参数传递时不用创建临时变量,节省了一个AP_HAL::HAL对象的构造和析构时间。AP_HAL不一定是命名空间,也可能是类、结构等。
该定义,方便访问硬件接口,比如console终端、定时器、I2C、SPI接口等。
实际的定义是在HAL_PX4_Class.cpp中定义,如下:
const HAL_PX4 AP_HAL_PX4;
hal是针对 AP_HAL_PX4 的引用。
经常使用的方法如下:
终端字符输出。
hal.console->printf() and hal.console->printf_P() to print strings (use the _P to use less memory on AVR) 
获取当前运行时间。
hal.scheduler->millis() and hal.scheduler->micros() to get the time since boot 
延时。

hal.scheduler->delay() and hal.scheduler->delay_microseconds() to sleep for a short time 
IO输入输出。
hal.gpio->pinMode(), hal.gpio->read() and hal.gpio->write() for accessing GPIO pins 
I2C操作,hal.i2c 
SPI操作,hal.spi 

3、setup()和loop()

每个sketch都有一个setup()和loop()函数。板子启动时,setup()被调用。这些调用都来自HAL代码中的main()函数调用(HAL_PX4_Class.cpp文件main_loop())。setup()函数只调用一次,用于初始化所有libraries。
Loop()循环被调用,执行主任务。

4、AP_HAL_MAIN()宏指令

每一个sketch(.pde文件)最底部,都有一个“AP_HAL_MAIN();”指令,它是一个HAL宏,用于定义一个C++ main函数,整个程序的入口。它真正的定义在AP_HAL_PX4_Main.h中。
#define AP_HAL_MAIN() \
extern "C" __EXPORT int SKETCH_MAIN(int argc, char * const argv[]); \
int SKETCH_MAIN(int argc, char * const argv[]) { \
hal.init(argc, argv); \
return OK; \
}
作为程序的起点,在AP_HAL_MAIN()里,就正式调用了hal.init()初始化代码。
程序的执行过程就是:程序起点AP_HAL_MAIN()  hal.init()  hal.main_loop()  sketch中的setup()和loop()。

copter_home_001-900x400.jpg

本文转载自:http://www.playuav.com/article/160

共有 人打赏支持
验尸医生
粉丝 1
博文 9
码字总数 1077
作品 0
房山
程序员
JAVA区块链项目实战视频课程

课程介绍 全国首套,基于java的区块链实战教程。目的是让更多的java编程者了解区块链,掌握区块链开发。 1、区块链理论:以node.js例子区块链原理有深刻理解; 2、区块链java实战:深刻理解区...

小红牛
09/14
0
0
《Django企业开发实战》大纲-草稿

《Django企业开发实战》大纲-草稿 the5fire的技术博客2017-07-2016 阅读 在国内写技术书籍可能是件吃力不讨好的事情,弄不好还会被骂,所以大部分有能力写书的人,不想在这个上面花那么多时间...

the5fire的技术博客
2017/07/20
0
0
【备忘】2017新大纲会计从业视频教程3科+精华讲义【完整版】无加密

+官方版电脑版题库软件 +官方版手机版题库软件 +官方激活码 +视频教程 会计班 全套 第1章-00前言.mp4 第1章-01节会计的概念与目标.mp4 第1章-02节会计的职能与方法.mp4 第1章-03节会计基本假...

qq_38155396
2017/07/18
0
0
HTTPS 从原理到实战 - 附送 OSChina HTTPS 配置

鉴于最近 OSChina 强制启用 HTTPS 登陆一事,备受关注,我花了点时间,贴出了N久以前写的关于安全性的文章,并又花了点时间把如何申请证书,如何配置Tomcat/Nginx一并解释了一遍,希望对各位...

虫虫
2012/03/01
14.5K
45
tensorflow入门---第三章

tensorflow程序分为两个阶段: 第一个阶段:定义计算图所有的计算 第二个阶段:执行计算 第一节:计算模型—–计算图 第二节:数据模型—–张量 第三节:运行模型—–会话 第一节:计算图 计...

cttacm
05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

5whys分析法在美团工程师中的实践

前言 网站的质量和稳定性对于用户和公司来说至关重要,但是在网站的快速发展过程中,由于各种原因导致事故不可避免的发生,这些大大小小的事故对公司难免会造成一些负面的影响,为了避免同类...

Skqing
25分钟前
1
0
Android 接收监听开机完成,并且开机自启动

1,定义一个广播接收者的类 ,并重写抽象方法 public class BootCompleteReceiver extends BroadcastReceiver 2,在Androidmanifest 注册 <receiver android:name=".receiver.BootCompleteRece......

lanyu96
29分钟前
2
0
小程序记录

1、button的边框、角等需要在伪元素after修改去除

originDu
31分钟前
1
0
微博什么技术啊……还说支持八个明星并发出轨,结果…

是的,大家可能都知道了,女神张靓颖结婚了。。 我去,写错了,是————赵丽颖。 为什么我头脑一瞬间出现的是张靓颖,作为一个码农,技术宅,拼音缩小都是 ZLY,博主我真有点傻傻分不清楚了...

Java技术栈
31分钟前
10
0
模块化

1,什么是模块化? 模块化是指将一个复杂的系统分解为多个模块,方便编码。 2,为什么要用模块化? 降低复杂性,降低代码耦合度,部署方便,提高效率。 3,模块化的好处? a,避免命名冲突,减少...

羊皮卷
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部