Pixhawk源码笔记一:APM代码基本结构
Pixhawk源码笔记一:APM代码基本结构
基础知识
详细参考:
第一部分:介绍
ArduPilot 代码分为5个主要部分,基本结构分xamples\GPS_AUTO_test),主要几个特点:
1、 pde文件包含很多 includes;
2、 定义了 hal 引用声明;
3、 代码非常粗糙;
4、 setup() 和 loop()函数
1、include文件
pde文件转变为C++文件后,提供必要的库引用支持。
2、hal引用声明
定义如下:
const AP_HAL::HAL& hal = AP_HAL_BOARD_DRIVER;// pixhawk等价于AP_HAL_PX4
该定义,方便访问硬件接口,比如console终端、定时器、I2C、SPI接口等。
,如下:
const HAL_PX4 AP_HAL_PX4;
hal是针对 AP_HAL_PX4 的引用。
经常使用的方法如下:
终端字符输出。->printf() and ->printf_P() to print strings (use the _P to use less memory on AVR)
获取当前运行时间。->millis() and ->micros() to get the time since boot
延时。->delay() and ->delay_microseconds() to sleep for a short time
IO输入输出。->pinMode(), ->read() and ->write() for accessing GPIO pins
I2C操作,
SPI操作,
3、setup()和loop()
每个sketch都有一个setup()和loop()函数。板子启动时,setup()被调用。这些调用都来自HAL代码中的main()函数调用(())。setup()函数只调用一次,用于初始化所有libraries。
Loop()循环被调用,执行主任务。
4、AP_HAL_MAIN()宏指令
每一个sketch(.pde文件)最底部,都有一个“AP_HAL_MAIN();”指令,它是一个HAL宏,用于定义一个C++ main函数,整个程序的入口。。
#define AP_HAL_MAIN() \
extern "C" __EXPORT int SKETCH_MAIN(int argc, char * const argv[]); \
int SKETCH_MAIN(int argc, char * const argv[]) { \
(argc, argv); \
return OK; \
}
作为程序的起点,在AP_HAL_MAIN()里,()初始化代码。
程序的执行过程就是:程序起点AP_HAL_MAIN() à () à () à sketch中的setup()和loop()。
Pixhawk源码笔记二:APM线程
Pixhawk源码笔记一:APM代码基本结构,参见:
这里,我们对 APM 线程进行讲解。如有问题,可以交流。新浪***@WalkAnt,转载本博客文章,请注明出处,以便更大范围的交流,谢谢。
第三部分 APM线程
详细参考:
对于APM1、APM2硬件板,不支持多线程,所以只能通过简单的定时器加回调函数
源代码分析 来自淘豆网www.taodocs.com转载请标明出处.