码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PX4模块设计之二十:PX4应用平台初始化


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

    • 1. PX4应用平台介绍
    • 2. PX4应用平台初始化实现
    • 3. 讨论和思考
    • 4. 参考资料

    在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
    
    • 1
    • 2
    • 3
    • 4
    px4_platform_init
     ├──> 
     │   ├──> cxx_initialize
     │   └──> kernel_ioctl_initialize
     ├──> px4_console_buffer_init
     ├──> 
     │   └──> PX4Crypto::px4_crypto_init      // 秘钥,加密算法
     ├──> hrt_init           // 高精度定时
     ├──> param_init         // 参数
     ├──> 
     │   └──> cpuload_initialize_once
     ├──> 
     │   └──> int ret_mount_procfs = mount(nullptr, "/proc", "procfs", 0, nullptr);
     ├──> 
     │   └──> int ret_mount_binfs = nx_mount(nullptr, "/bin", "binfs", 0, nullptr);
     ├──> px4::WorkQueueManagerStart     // 工作队列
     ├──> uorb_start    // uorb消息
     ├──> px4_log_initialize  // 日志uORB消息注册
     └──> 
         └──> cdcacm_init
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    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设计

  • 相关阅读:
    千兆以太网(一)——RGMII与GMII接口
    贪心算法--装箱问题
    Linux引导故障排除:从问题到解决方案的详细指南
    微信小程序——标签wxml、样式wxss、js、json
    前端页面布局之【响应式布局】
    java毕业设计二手交易系统Mybatis+系统+数据库+调试部署
    JavaScript学习之路---JavaScript操作BOM
    速卖通新品如何推广,速卖通的推广渠道有哪些?——站斧浏览器
    【Qt】Qt下配置OpenCV
    执行mysql-community-libs-8.1.0-1.el8.x86_64.rpm报错依赖检测失败
  • 原文地址:https://blog.csdn.net/lida2003/article/details/126297213
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号