飞控整个软件代码运行在定时器调度模式,同时对各个外设模块中断优先级进行了合理设计,确保程序运行的实时性和稳健性。其中对实时性、周期性要求高的比如:传感器数据采集、姿态解算、惯性导航、控制等任务,采用定时器调度的方式执行,其它耗时且对周期性要求不高的子任务例如:电压采集、按键扫描、显示屏刷 新、地面站发送、加速度计标定、磁力计标定、遥控器行程标定、参数保存等放在while(1)里面,利用中断空闲的时间去执行。
飞控上电复位后,单片机会首先根据官方启动文件定义来初始化堆栈指针、程序计数器、堆栈大小、中断向量表等一系列过程,最后会运行C函数分支入口_main,startup_msp432p401r_uvision.s内容仅做了解就可以。
下面我们利用Understand软件来对飞控程序框架进行分析,首先看main主函数的调用框图:
首先主函数main会调用硬件初始化函数HardWave_Init(),硬件初始化包括以下内容:
主函数main执行硬件初始化函数HardWave_Init()完毕后,会进入进入while(1)内利用中断空闲时间执行按键扫描、OLED显示、加速度计校准、磁力计校准、遥控器行程校准、参数保存等。
定时器中断任务调度主要执行的任务为遥控器数据转换、传感器数据采集、姿态解算、光流速度融合、惯导GPS数据融合、SDK数据解析、控制、校准检测等。
其它中断服务函数如PPM中断解析函数、串口数据解析函数,当外设模块发送中断信号后,会进入对应中断函数:
地面站数据解析
OPENMV1数据解析
OPENMV2数据解析
综上所述,飞控程序运行时,存在三类主要的任务:
1、定时器任务调度中断函数;
2、其它外设中断函数(PPM解析、串口中断等);
3、While(1)里面非实时函数;
要想程序运行稳定、串口数据尽可能地不丢帧,PPM数据解析稳定,必须要考虑每个任务实际用时开销,对中断优先级进行合理的设计。
在设计定时器任务调度中断函数时,需要对每一个子任务的时间开销进行统计,且定时器中断服务函数的调度周期要大于子任务的最大时间开销之和。在进行串口中断优先级设计时,需要把握以下几点:
1、多个串口通讯时,串口通讯波特率可以降低一点。
2、合计设计优先级,当存在不同波特率通讯时,通讯波特率高的串口中断优先级要高于波特率低的。
3、存在优先级高于串口中断的其它中断任务时,其它中断任务的总的最大时间开销也要考虑。
上一篇:七、MSP432飞控快速二次开发入门教程
下一篇:如何使用Energia快速开发常见的MSP430/432LaunchPad
推荐阅读最新更新时间:2024-11-02 19:27
设计资源 培训 开发板 精华推荐
- STR-NCV8163-NCP163-EVK:Strata Enabled NCV8163/NCP163 - 250mA LDO,具有 1.2V 至 5.3V 的固定输出电压
- 触摸调光灯泡灯 (基于8022W方案+26mm LED灯丝)
- 使用 Richtek Technology Corporation 的 RT9986A 的参考设计
- ADPA9002-EVALZ,用于评估 ADPA9002 GaAs、pHEMT、MMIC、单正电源、DC 至 10 GHz 功率放大器的评估套件
- 具有固定输出电压和精密使能引脚的 ADP5024 降压稳压器的典型应用电路
- LT6656BCDC-1.25、1.25V 电压基准作为微功率稳压器的典型应用
- Micro usb 贴片触点 飞线板
- AM3G-4805SZ 5V 3 瓦直流转直流转换器的典型应用
- LTC1174-5 降压-升压转换器的典型应用电路
- 杜国靖