wordpress theme 免費北京搜索引擎優(yōu)化經(jīng)理
通過之前章節(jié)對PH47體系的介紹,讀者對PH47能建立起了初步的概念及掌握各主要構(gòu)成部分的使用開發(fā)方法。從本章節(jié)開始,就將對PH47代碼的二次開發(fā)內(nèi)容進行具體講述。
本部分就將對PH47框架當中代碼文件的組織方式及功能作用進行介紹,對于將來熟練使用代碼框架進行二次開發(fā)具有重要的意義。
PH47代碼框架重要文件夾及文件
PH47文件夾包含了代碼框架的所有代碼文件,以及由Stm32CubeMx生成的控制板代碼框架。此文件夾下DevStudio文件夾內(nèi)為框架的核心代碼。
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進行代碼編輯管理時,控制板相關(guān)代碼文件組織度好于VS Code
文件夾 PH47\DevStudio
PH7 代碼框架所有源代碼文件及庫文件均位于DevStudio文件夾中。此文件夾同時是用戶進行二次開發(fā)的主要文件夾。框架自身代碼文件及用戶二次開發(fā)代碼文件均位于本文件夾中。
控制板配置文件PH47\DevStudio\BoardConfig\BoardConfig.h
PH7框架的各控制板項目(PH4, BBP, BBP_Copter等)編譯開關(guān)配置文件為 \DevStudio\BoardConfig\BoardConfig.h。該文件確定了控制板的硬件類別以及固件類別。同時設(shè)定了PH47框架最基本的一些數(shù)值。
在打開 xxx.uvprojx 文件進行keil項目編譯之前,必須將 BoardConfig.h 文件中設(shè)置飛控板類型的 BOARD_TYPE,以及固件類型FIRM_WARE_TYPE。
例如要編譯適用于BBP控制板(BBP v2,BBP mini),固件項目為多傳感器基礎(chǔ)開發(fā)平臺的BBDB,那么就需要進行如下設(shè)定:
#define BOARD_TYPEBOARD_BBP
#define FIRM_WARE_TYPEFIRMWARE_BBDB
控制板ID宏定義位于PH47\DevStudio\ConfigConstant.h文件中。
文件夾DevStudio下各文件夾功能
DevStudio文件夾下各子文件夾分別對應的邏輯層、引用對象、實現(xiàn)文件如下表所示:
文件夾 | 實現(xiàn)的邏輯層 | 全局引用對象 | 實現(xiàn)文件 |
---|---|---|---|
\BSP | 驅(qū)動層 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自動生成的硬件代碼基礎(chǔ)上,由底向上構(gòu)建了4個邏輯層,分別為:驅(qū)動層 driver、框架層 frame、算法層 algorithms、應用層 application。
drv(mcu)、frm(core)、algo、app 4個全局引用分別對應以上4個邏輯層。通過這些引用,用戶可在整個PH7代碼框架范圍內(nèi)調(diào)用各邏輯層的功能。
硬件驅(qū)動層引用對象drv及mcu
硬件驅(qū)動層driver用于實現(xiàn)對控制板硬件設(shè)備的驅(qū)動及管理。驅(qū)動層下包含多個指向硬件設(shè)備驅(qū)動對象的指針。通過這些指針,用戶可對硬件設(shè)備進行數(shù)據(jù)讀寫、設(shè)備控制等多種功能。
驅(qū)動層代碼對用戶開放,高級用戶可通過創(chuàng)建指向不同類型設(shè)備驅(qū)動類的指針,實現(xiàn)支持設(shè)備類型的擴展?;?qū)σ延杏布O(shè)備進行替換。
驅(qū)動層外設(shè)驅(qū)動引用對象drv下的個外設(shè)模塊指針介紹如下(在\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 // 調(diào)試串口(控制臺串口)指針
drv._pPwm // PWM in 對象指針
drv._pMutiDof// 10dof 傳感器對象指針(可選)
驅(qū)動層MCU驅(qū)動引用對象mcu下的指針介紹(在\DevStudio\Bsp\Driver.h文件中聲明):
CTimer_Port*_pSysTimer;// 系統(tǒng)定時器對象指針
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代碼體系建立了運行邏輯的框架,框架層負責整個框架的運行調(diào)度及包括參數(shù)系統(tǒng)、遙測通訊系統(tǒng)等重要的基礎(chǔ)功能實現(xiàn)。
框架層下包含多個實現(xiàn)不同功能的次級引用,通過這些次級引用,用戶可使用它們提供的功能函數(shù)。重要的次級引用對象如:
frm.log// 機載數(shù)據(jù)記錄系統(tǒng)引用對象
frm.mutipilot// 多飛控板板協(xié)作控制引用對象
core.para// 機載控制參數(shù)系統(tǒng)引用對象
core.wp// 航點記錄系統(tǒng)引用對象
core.mavlink// 對地面站(GCS)數(shù)據(jù)通訊系統(tǒng)引用對象
core.airlink// 多飛控板通訊系統(tǒng)引用對象
框架層功能函數(shù)可通過frm或core引用對象來使用,它們的區(qū)別在于,開源代碼部分可以同時使用frm或core引用對應的功能函數(shù)。而在閉源代碼部分,只能通過core來引用相應的功能函數(shù)??蚣軐庸δ艽a小部分向用戶開放。
算法層引用對象algo:
算法層Algorithms用于飛控各種控制算法的實現(xiàn),如基礎(chǔ)數(shù)學庫、姿態(tài)控制器、高度——速度控制器、輸入控制器、狀態(tài)控制器等的具體實現(xiàn)。算法層下包含多個指向不同控制器對象的指針。高級用戶可通過創(chuàng)建指向不同控制器的指針實現(xiàn)控制器功能的拓展或控制器的替換。關(guān)于算法層下對象或指針的詳細介紹,參見:
應用層引用對象app
應用層Application用于對PH47代碼框架的最終邏輯功能實現(xiàn)。用戶對飛控或其他控制對象的邏輯應用控制功能均位于該層。用戶的二次開發(fā)工作的主要代碼實現(xiàn)也位于該層。
應用層引用對象app主要面向用戶二次開發(fā),方便用戶使用應用層的各種功能函數(shù)。
數(shù)據(jù)總線系統(tǒng)引用bus
數(shù)據(jù)總線引用bus是PH7框架中最重要和常用的引用之一,通過bus引用,戶可以在整個PH7框架內(nèi)進行數(shù)據(jù)的交換傳輸。關(guān)于bus引用的詳細介紹,參見:“11.PH47代碼框架數(shù)據(jù)總線系統(tǒng)”。
消息循環(huán)系統(tǒng)引用msg
功能測試系統(tǒng)引用test
用戶二次開發(fā)涉及主要文件:
文件DevStudio\Application\App_xxx.cpp(.h)
應用層實現(xiàn)文件,用可在該文件中實現(xiàn)自己的各種運行及控制邏輯。是用戶二次開發(fā)工作的主要代碼承載文件。
文件DevStudio\BoardConfig\Board_xxx\DataBus_BBP_xxx.cpp(.h)
數(shù)據(jù)總線定義文件,用戶可在已有數(shù)據(jù)總線條目設(shè)置的基礎(chǔ)上進行追加,定制方法具體可見“數(shù)據(jù)總線使用”。
文件DevStudio\BoardConfig\Board_xxx\ParamDict_xxx.cpp(.h)
參數(shù)屬性字典及參數(shù)定義文件,用戶在這兩個文件中可對參數(shù)系統(tǒng)進行定制,定制方法具體可見“參數(shù)系統(tǒng)使用”
文件PH47\DevStudio\Algorithms\Algorithms.cpp(.h)
算法層實現(xiàn)文件,用戶可增加新的算法或控制器模塊,或替換原有模塊。
文件DevStudio\Bsp\Driver.cpp(.h)
驅(qū)動層實現(xiàn)文件,用戶可增加新的硬件驅(qū)動,或替換原有驅(qū)動模塊。
更多內(nèi)容見CSDN博客專欄:無人機飛控https://blog.csdn.net/ss15/category_9690939.html?spm=1001.2014.3001.5482
相關(guān)資源:PH47: PH47運動控制代碼框架.https://gitee.com/ss15/ph47