文档章节

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

验尸医生
 验尸医生
发布于 2016/03/23 10:39
字数 644
阅读 16
收藏 0
点赞 1
评论 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
房山
程序员
tensorflow入门---第三章

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

cttacm
05/05
0
0
机器学习的最佳学习路线原来只有四步

AI这个词相信大家都非常熟悉,近几年来人工智能圈子格外热闹,光是AlphoGo就让大家对它刮目相看。今天小天就来跟大家唠一唠如何进军人工智能的第一步——机器学习。 在机器学习领域,Python已...

ufv59to8
05/12
0
0
Spark如何使用Akka实现进程、节点通信的简明介绍

《深入理解Spark:核心思想与源码分析》一书前言的内容请看链接《深入理解SPARK:核心思想与源码分析》一书正式出版上市 《深入理解Spark:核心思想与源码分析》一书第一章的内容请看链接《第...

beliefer
2016/04/05
0
0
《Django企业开发实战》大纲-草稿

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

the5fire的技术博客
2017/07/20
0
0
翻译:《用python和Qt进行GUI编程》——介绍

介绍: 这本书讲的是如何利用Python和Qt来开发GUI应用程序的。仅仅需要一点点必备的知识:你可以使用一些面相对象的语言来编程,例如C++,C#,java或者python等等。在富文本编辑的那些章节,...

duoduo3_69
2013/02/07
0
0
C#游戏开发快速入门教程Unity5.5教程

C#游戏开发快速入门教程Unity5.5教程 试读文档下载地址:http://pan.baidu.com/s/1slwBHoD C#是微软发布的高级程序设计语言,这门语言和C语言一样,已经成为了大学计算机相关专业必学的一门语...

大学霸
2014/09/28
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
SSL 与数字证书 - 结束语

目录 第一章 为什么网络是不安全的? 第二章 信息安全的基本概念 第一节 安全的定义 第二节 认证与授权 第三章 加密与算法 第一节 散列(HASH) 第二节 对称加密(SYMMETRIC CRYPTOGRAPHY) ...

虫虫
2012/03/01
0
6
SSL 与数字证书 - 第二章 - 信息安全的基本概念

目录 第一章 为什么网络是不安全的? 第二章 信息安全的基本概念 第一节 安全的定义 第二节 认证与授权 第三章 加密与算法 第一节 散列(HASH) 第二节 对称加密(SYMMETRIC CRYPTOGRAPHY) ...

虫虫
2012/03/01
0
3

没有更多内容

加载失败,请刷新页面

加载更多

下一页

IntelliJ IDEA 详细图解最常用的配置,适合刚刚用的新人。

刚刚使用IntelliJ IDEA 编辑器的时候,会有很多设置,会方便以后的开发,磨刀不误砍柴工。 比如:设置文件字体大小,代码自动完成提示,版本管理,本地代码历史,自动导入包,修改注释,修改...

kim_o
21分钟前
0
0
Google Java编程风格指南

目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义。当且仅当一个Java源文件符合此文档中的规则, 我们才认为它符合...

niithub
23分钟前
0
0
java.net.MalformedURLException异常说明

1.异常片段 Java代码中,在进行URL url = new URL(urllink)操作时,提示以下异常信息,该类异常主要问题出在参数urllink上面。 异常片段1 java.net.MalformedURLException at java.ne...

lqlm
23分钟前
0
0
CentOS7修改mysql5.6字符集

解决办法:CentOS7下修改MySQL数据库字符编码为UTF-8,UTF-8包含全世界所有国家所需要的字符集,是国际编码。 具体操作如下: 1.进入MySQL [root@tianqi-01 ~]# mysql -uroot -p Enter passw...

河图再现
25分钟前
0
0
DevExpress v18.1新版亮点——WPF篇(一)

用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容。本文将介绍了DevExpress WPF v18.1 的新功能,快来下载试用新版本!点击下载>> Accordion Co...

Miss_Hello_World
28分钟前
0
0
Rancher 2.0集群与工作负载告警

Rancher 2.0操作指南。本文将step by step演示如何使用Rancher 2.0中集成的告警功能,包括设置通知程序、设置集群级别以及工作负载级别的告警。 在Rancher 1.x时期,告警功能是很多Rancher用...

RancherLabs
32分钟前
1
0
Python中字符串拼接的N中方法

python拼接字符串一般有以下几种方法: ①直接通过(+)操作符拼接 s = 'Hello'+' '+'World'+'!'print(s) 输出结果:Hello World! 使用这种方式进行字符串连接的操作效率低下,因为python中...

木头释然
34分钟前
9
0
JAVA排序之归并排序

归并排序思路就是不停拆分数组,直到拆成一个一个元素,之后将拆出来的元素按照拆分顺序反过来的顺序合并,出现前边值大于后边值,则换位置,放入临时数组,最后将临时数组覆盖原数组. public stat...

勤奋的蚂蚁
45分钟前
1
0
想要年薪20万,先看会不会这28个企业运维岗经典面试题

1、Linux如何挂载windows下的共享目录? mount.cifs //IP地址/server /mnt/server -o user=administrator,password=123456 linux 下的server需要自己手动建一个 后面的user与pass 是windows...

Py爱好
51分钟前
0
0
python的url分配

from django.conf.urls import url,include urlpatterns=[ url('xinwen/',include('xinwen.urls')) ] from django.urls import path from xinwen import views urlpatterns = [ path('login/......

南桥北木
53分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部