六、MSP432飛控軟件框架分析
飛控整個軟件代碼運(yùn)行在定時器調(diào)度模式,同時對各個外設(shè)模塊中斷優(yōu)先級進(jìn)行了合理設(shè)計,確保程序運(yùn)行的實時性和穩(wěn)健性。其中對實時性、周期性要求高的比如:傳感器數(shù)據(jù)采集、姿態(tài)解算、慣性導(dǎo)航、控制等任務(wù),采用定時器調(diào)度的方式執(zhí)行,其它耗時且對周期性要求不高的子任務(wù)例如:電壓采集、按鍵掃描、顯示屏刷?新、地面站發(fā)送、加速度計標(biāo)定、磁力計標(biāo)定、遙控器行程標(biāo)定、參數(shù)保存等放在while(1)里面,利用中斷空閑的時間去執(zhí)行。
飛控上電復(fù)位后,單片機(jī)會首先根據(jù)官方啟動文件定義來初始化堆棧指針、程序計數(shù)器、堆棧大小、中斷向量表等一系列過程,最后會運(yùn)行C函數(shù)分支入口_main,startup_msp432p401r_uvision.s內(nèi)容僅做了解就可以。

下面我們利用Understand軟件來對飛控程序框架進(jìn)行分析,首先看main主函數(shù)的調(diào)用框圖:


首先主函數(shù)main會調(diào)用硬件初始化函數(shù)HardWave_Init(),硬件初始化包括以下內(nèi)容:


主函數(shù)main執(zhí)行硬件初始化函數(shù)HardWave_Init()完畢后,會進(jìn)入進(jìn)入while(1)內(nèi)利用中斷空閑時間執(zhí)行按鍵掃描、OLED顯示、加速度計校準(zhǔn)、磁力計校準(zhǔn)、遙控器行程校準(zhǔn)、參數(shù)保存等。


定時器中斷任務(wù)調(diào)度主要執(zhí)行的任務(wù)為遙控器數(shù)據(jù)轉(zhuǎn)換、傳感器數(shù)據(jù)采集、姿態(tài)解算、光流速度融合、慣導(dǎo)GPS數(shù)據(jù)融合、SDK數(shù)據(jù)解析、控制、校準(zhǔn)檢測等。




? ? 其它中斷服務(wù)函數(shù)如PPM中斷解析函數(shù)、串口數(shù)據(jù)解析函數(shù),當(dāng)外設(shè)模塊發(fā)送中斷信號后,會進(jìn)入對應(yīng)中斷函數(shù):






綜上所述,飛控程序運(yùn)行時,存在三類主要的任務(wù):
1、定時器任務(wù)調(diào)度中斷函數(shù);
2、其它外設(shè)中斷函數(shù)(PPM解析、串口中斷等);
3、While(1)里面非實時函數(shù);
要想程序運(yùn)行穩(wěn)定、串口數(shù)據(jù)盡可能地不丟幀,PPM數(shù)據(jù)解析穩(wěn)定,必須要考慮每個任務(wù)實際用時開銷,對中斷優(yōu)先級進(jìn)行合理的設(shè)計。

在設(shè)計定時器任務(wù)調(diào)度中斷函數(shù)時,需要對每一個子任務(wù)的時間開銷進(jìn)行統(tǒng)計,且定時器中斷服務(wù)函數(shù)的調(diào)度周期要大于子任務(wù)的最大時間開銷之和。在進(jìn)行串口中斷優(yōu)先級設(shè)計時,需要把握以下幾點(diǎn):
1、多個串口通訊時,串口通訊波特率可以降低一點(diǎn)。
2、合計設(shè)計優(yōu)先級,當(dāng)存在不同波特率通訊時,通訊波特率高的串口中斷優(yōu)先級要高于波特率低的。
3、存在優(yōu)先級高于串口中斷的其它中斷任務(wù)時,其它中斷任務(wù)的總的最大時間開銷也要考慮。