文档章节

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

验尸医生
 验尸医生
发布于 2016/03/23 10:39
字数 644
阅读 33
收藏 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
房山
程序员
私信 提问
Python函数基础教程-张明阳-专题视频课程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a2011480169/article/details/83579571 Python函数基础教程—730人已学习 课程介绍 通过本次课程的讲解,可以...

安静的技术控
2017/12/15
0
0
【译】 WebSocket 协议第十二章——使用其他规范中的WebSocket协议

概述 本文为 WebSocket 协议的第十二章,本文翻译的主要内容为如何使用其他规范中的 WebSocket 协议。 有兴趣了解该文档之前几章内容的同学可以见: 【译】WebSocket 协议——摘要( Abstra...

黄Java
02/19
0
0
JAVA区块链项目实战视频课程

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

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

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

the5fire的技术博客
2017/07/20
0
0
tensorflow入门---第三章

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

cttacm
2018/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
16分钟前
5
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
41分钟前
2
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
44分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
50分钟前
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
55分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部