软件系统架构

本节内容将介绍RflyPilot的软件系统架构。RflyPilot系统中的任务主要以线程的形式存在,部分线程之间独立运行互不干扰,而某些关键线程存在节拍关系。各个线程间通过内部消息系统进行通信。

主函数

RflyPilot在启动时会读取rflypilot.txt配置文件,并根据valid_mode的设置情况,通过switch-case语句,判断启动哪些线程。在RflyPilot中,所有任务都以线程的形式存在,比如控制器线程start_usrController()、IMU线程start_icm42688p()、GPS线程start_gps()、日志线程start_ulog()等等。

线程 功能 备注
start_console 启动控制台
start_screen 启动控制台实时参数显示功能
start_ulog 启动ulog日志记录
start_sbus 运行串行总线接收机驱动 HIL/EXP/SIH
start_system_app 运行默认的系统级消息发布系统 主要用于更新消息system_scope_msg
start_scope 运行在线示波器系统 包括系统示波器、控制器示波器、状态估计器示波器
start_icm20689_new 启动icm20689线程 IMU,HIL,支持FIFO读取
start_ist8310 启动ist8310线程 磁力计,HIL
start_baro 启动MS5611线程 气压计,HIL/EXP
start_gps 启动GPS线程 GPS,HIL/EXP
start_attitudeEstimator 启动姿态估计线程 支持代码生成
start_lpe 启动LPE位置估计器 支持代码生成
start_usrController 启动控制器线程 支持代码生成
start_icm42688p 启动icm42688p线程 IMU,EXP
start_qmc5883l 启动qmc5883l线程 磁力计,EXP
start_sih 启动SIH仿真模型线程 被控对象模型,SIH
start_offboard 启动offboard线程 用于接收计算机指令
start_calibration 启动传感器校准线程 仅在传感器校准时运行

Tip

关于各个仿真验证模式运行不同线程的具体情况,感兴趣的的读者可以仔细阅读代码src/main.cpp

系统级函数

系统级函数是有与嵌入式系统紧密相关的函数,包括线程的创建、核心绑定、时间戳等等,这些函数通常定义在src/system_utility中。

函数 功能 备注
create_thread 用于创建线程 bool ret = create_thread("barometer", thread_baro, NULL);
core_bind 用于将某一线程绑定至某个CPU核心 输入参数0~3
get_time_now 用于获取当前系统时间 单位(us)