wordpress 站中站淘宝站外引流推广方法
通过之前章节对PH47体系的介绍,读者对PH47能建立起了初步的概念及掌握各主要构成部分的使用开发方法。从本章节开始,就将对PH47代码的二次开发内容进行具体讲述。
本部分就将对PH47框架当中代码文件的组织方式及功能作用进行介绍,对于将来熟练使用代码框架进行二次开发具有重要的意义。
PH47代码框架重要文件夹及文件
PH47文件夹包含了代码框架的所有代码文件,以及由Stm32CubeMx生成的控制板代码框架。此文件夹下DevStudio文件夹内为框架的核心代码。
BBP,BBP_Copter, BBDB均为Stm32CubeMx生成,对应各自控制板工程框架的代码文件夹,以下均以XXX来代替。
各控制板Keil项目文件PH47\xxx\MDK-ARM\xxx.uvprojx
PH7 代码适用控制板的keil项目文件位于PH47\xxx\MDK-ARM\文件夹下,文件名为xxx.uvprojx。xxx对应控制板名称,即BBP、BBP_Copter、BBDB等。上述项目文件由Stm32CubeMx生成硬件代码框架时生成。
各控制板Visual Studio项目文件\PH47\xxx\xxx.sln
Visaual Studio 项目文件,在Visual Studio IDE进行代码编辑管理时,控制板相关代码文件组织度好于VS Code
文件夹 PH47\DevStudio
PH7 代码框架所有源代码文件及库文件均位于DevStudio文件夹中。此文件夹同时是用户进行二次开发的主要文件夹。框架自身代码文件及用户二次开发代码文件均位于本文件夹中。
控制板配置文件PH47\DevStudio\BoardConfig\BoardConfig.h
PH7框架的各控制板项目(PH4, BBP, BBP_Copter等)编译开关配置文件为 \DevStudio\BoardConfig\BoardConfig.h。该文件确定了控制板的硬件类别以及固件类别。同时设定了PH47框架最基本的一些数值。
在打开 xxx.uvprojx 文件进行keil项目编译之前,必须将 BoardConfig.h 文件中设置飞控板类型的 BOARD_TYPE,以及固件类型FIRM_WARE_TYPE。
例如要编译适用于BBP控制板(BBP v2,BBP mini),固件项目为多传感器基础开发平台的BBDB,那么就需要进行如下设定:
#define BOARD_TYPEBOARD_BBP
#define FIRM_WARE_TYPEFIRMWARE_BBDB
控制板ID宏定义位于PH47\DevStudio\ConfigConstant.h文件中。
文件夹DevStudio下各文件夹功能
DevStudio文件夹下各子文件夹分别对应的逻辑层、引用对象、实现文件如下表所示:
文件夹 | 实现的逻辑层 | 全局引用对象 | 实现文件 |
---|---|---|---|
\BSP | 驱动层 Driver | drv或mcu | Driver.cpp(.h)McuDev(.h) |
\Frame | 框架层 Frame | Frm或core | Frame.cpp(.h) |
\Algorithms | 算法层 Algorithms | algo | Algorithms.cpp(.h) |
\Application | 应用层 Application | app | App_BBP.cpp(.h) |
\BoardConfig | 飞控板配置 | ---- | BoardConfig.h |
PH47代码框架各逻辑层介绍
PH7代码框架在由Stm32CubeMx自动生成的硬件代码基础上,由底向上构建了4个逻辑层,分别为:驱动层 driver、框架层 frame、算法层 algorithms、应用层 application。
drv(mcu)、frm(core)、algo、app 4个全局引用分别对应以上4个逻辑层。通过这些引用,用户可在整个PH7代码框架范围内调用各逻辑层的功能。
硬件驱动层引用对象drv及mcu
硬件驱动层driver用于实现对控制板硬件设备的驱动及管理。驱动层下包含多个指向硬件设备驱动对象的指针。通过这些指针,用户可对硬件设备进行数据读写、设备控制等多种功能。
驱动层代码对用户开放,高级用户可通过创建指向不同类型设备驱动类的指针,实现支持设备类型的扩展。或对已有硬件设备进行替换。
驱动层外设驱动引用对象drv下的个外设模块指针介绍如下(在\DevStudio\Bsp\Driver.h文件中声明):
drv._pImu// 6轴(Gyro,Accel) IMU对象指针
drv._pMag// 磁强计对象指针
drv._pGps// GPS 对象指针
drv._pAirSpeed // 空速计对象指针
drv._pFlash// Flash存储器对象指针
drv._pEeprom// EEProm存储器对象指针
drv._pUsartTele// 遥测通讯串口对象指针
drv._pUsartGps// GPS通讯窗口指针
drv._pUsartConsole // 调试串口(控制台串口)指针
drv._pPwm // PWM in 对象指针
drv._pMutiDof// 10dof 传感器对象指针(可选)
驱动层MCU驱动引用对象mcu下的指针介绍(在\DevStudio\Bsp\Driver.h文件中声明):
CTimer_Port*_pSysTimer;// 系统定时器对象指针
CI2C*_pI2C_1;// I2C 1 接口对象指针
CSpi_Port*_pSpiImu;// IMU SPI 接口对象指针
CSpi_Port*_pSpiAdcImu;// IMU ADC 的SPI 接口对象指针(PH7)
CSpi_Port*_pSpiFlash;// Flash SPI 接口对象指针
框架层引用对象frm 及 core:
框架层frame是PH47代码框架最重要的逻辑层之一,框架层顾名思义,为整个PH47代码体系建立了运行逻辑的框架,框架层负责整个框架的运行调度及包括参数系统、遥测通讯系统等重要的基础功能实现。
框架层下包含多个实现不同功能的次级引用,通过这些次级引用,用户可使用它们提供的功能函数。重要的次级引用对象如:
frm.log// 机载数据记录系统引用对象
frm.mutipilot// 多飞控板板协作控制引用对象
core.para// 机载控制参数系统引用对象
core.wp// 航点记录系统引用对象
core.mavlink// 对地面站(GCS)数据通讯系统引用对象
core.airlink// 多飞控板通讯系统引用对象
框架层功能函数可通过frm或core引用对象来使用,它们的区别在于,开源代码部分可以同时使用frm或core引用对应的功能函数。而在闭源代码部分,只能通过core来引用相应的功能函数。框架层功能代码小部分向用户开放。
算法层引用对象algo:
算法层Algorithms用于飞控各种控制算法的实现,如基础数学库、姿态控制器、高度——速度控制器、输入控制器、状态控制器等的具体实现。算法层下包含多个指向不同控制器对象的指针。高级用户可通过创建指向不同控制器的指针实现控制器功能的拓展或控制器的替换。关于算法层下对象或指针的详细介绍,参见:
应用层引用对象app
应用层Application用于对PH47代码框架的最终逻辑功能实现。用户对飞控或其他控制对象的逻辑应用控制功能均位于该层。用户的二次开发工作的主要代码实现也位于该层。
应用层引用对象app主要面向用户二次开发,方便用户使用应用层的各种功能函数。
数据总线系统引用bus
数据总线引用bus是PH7框架中最重要和常用的引用之一,通过bus引用,户可以在整个PH7框架内进行数据的交换传输。关于bus引用的详细介绍,参见:“11.PH47代码框架数据总线系统”。
消息循环系统引用msg
功能测试系统引用test
用户二次开发涉及主要文件:
文件DevStudio\Application\App_xxx.cpp(.h)
应用层实现文件,用可在该文件中实现自己的各种运行及控制逻辑。是用户二次开发工作的主要代码承载文件。
文件DevStudio\BoardConfig\Board_xxx\DataBus_BBP_xxx.cpp(.h)
数据总线定义文件,用户可在已有数据总线条目设置的基础上进行追加,定制方法具体可见“数据总线使用”。
文件DevStudio\BoardConfig\Board_xxx\ParamDict_xxx.cpp(.h)
参数属性字典及参数定义文件,用户在这两个文件中可对参数系统进行定制,定制方法具体可见“参数系统使用”
文件PH47\DevStudio\Algorithms\Algorithms.cpp(.h)
算法层实现文件,用户可增加新的算法或控制器模块,或替换原有模块。
文件DevStudio\Bsp\Driver.cpp(.h)
驱动层实现文件,用户可增加新的硬件驱动,或替换原有驱动模块。
更多内容见CSDN博客专栏:无人机飞控https://blog.csdn.net/ss15/category_9690939.html?spm=1001.2014.3001.5482
相关资源:PH47: PH47运动控制代码框架.https://gitee.com/ss15/ph47