PX4模块设计之二十:PX4应用平台初始化

本文详细介绍了PX4飞行控制系统中应用平台初始化的过程,包括秘钥/加密算法、高精度定时、系统参数、工作队列、uORB消息及打印日志等功能模块的初始化实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PX4启动过程章节的基础上,可以深入分析下PX4应用平台(框架)的实现。

1. PX4应用平台介绍

PX4应用平台初始化(px4_platform_init)在INIT初始化脚本之前,被PX4应用使用的抽象的模块都在这里进行初始化。

比如:

  1. 秘钥/加密算法
  2. 高精度定时
  3. PX4系统参数
  4. 工作队列
  5. uORB消息
  6. 打印日志
    等等(驱动部分不再这里讨论)

注:部分尚没有对应研读的文章,没有给出链接,后续会更新。

2. PX4应用平台初始化实现

所谓平台其实更多的就是考虑通用组件,将共性的东西抽象提取出来,设计和代码集中管理和实现。平台部分的代码因晚于驱动早于应用初始化。

nsh_initialize
 └──> boardctl(BOARDIOC_INIT, 0);
     └──> board_app_initialize
         └──> px4_platform_init
px4_platform_init
 ├──> <!defined(CONFIG_BUILD_FLAT)>
 │   ├──> cxx_initialize
 │   └──> kernel_ioctl_initialize
 ├──> px4_console_buffer_init
 ├──> <defined(PX4_CRYPTO)>
 │   └──> PX4Crypto::px4_crypto_init      // 秘钥,加密算法
 ├──> hrt_init           // 高精度定时
 ├──> param_init         // 参数
 ├──> <CONFIG_SCHED_INSTRUMENTATION>
 │   └──> cpuload_initialize_once
 ├──> <defined(CONFIG_FS_PROCFS)>
 │   └──> int ret_mount_procfs = mount(nullptr, "/proc", "procfs", 0, nullptr);
 ├──> <defined(CONFIG_FS_BINFS)>
 │   └──> int ret_mount_binfs = nx_mount(nullptr, "/bin", "binfs", 0, nullptr);
 ├──> px4::WorkQueueManagerStart     // 工作队列
 ├──> uorb_start    // uorb消息
 ├──> px4_log_initialize  // 日志uORB消息注册
 └──> <defined(CONFIG_SYSTEM_CDCACM) && defined(CONFIG_BUILD_FLAT)>
     └──> cdcacm_init

3. 讨论和思考

看到的一些现象:

  1. 整体上看这里PX4飞控系统是有一些基础组件(模块)的抽象。
  2. PX4应用平台软件模块,硬件驱动,框架设计等解耦并非都能完全到位。
  3. 各个模块的启动顺序相对来说还是有时序要求。

现象思考:

  1. 虽然有些软硬件的内容可能并非完全能够解耦到位。这也是可以完全理解的,毕竟嵌入式本身就是软硬件协同工作的产品。
  2. 随着系统设计规模化,功能复杂化,软硬件的解耦和抽象是非常重要的,并且是后续维护和进一步开发基础。
  3. 假设业务和硬件确实有强耦合,也可以通过一些方法论(比如:业务抽象和标准化)进行解耦,从而成为弱耦合而非强耦合。
  4. PX4作为开源代码,参与人员众多,且存在较多历史原因,重构是一个非常复杂的问题。

希望,随着硬件性能的提升,能有机会看到从上至下进行整体设计考虑,更加模块化/人性化,从整个产品系统做进一步的提升,便于更多的人易于了解和上手设计研发工作。

4. 参考资料

【1】PX4开源软件框架简明简介
【2】PX4模块设计之十:PX4启动过程
【3】PX4模块设计之十二:High Resolution Timer设计
【4】PX4模块设计之十三:WorkQueue设计
【5】PX4模块设计之二:uORB消息代理
【6】PX4模块设计之十五:PX4 Log设计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值