0%

【编程】嵌入式MCU软件架构设计

嵌入式MCU开发-裸机/RTOS的优缺点

裸机程序特点

  • 轮询执行,通常为每个模块将其核心业务加入时间片周期轮询
  • 从RTOS的角度理解,相当于仅有软件定时器,通过定时器超时执行 核心业务回调函数,而这个轮询时间由开发者根据实际情况设定
  • 无法实现非阻塞延时,只用到MSP主堆栈,任务的上下文无法保存

RTOS程序特性

  • 对于单核MCU来说,RTOS虽不是真正的并行执行,只是宏观上达到多程序并行的效果
  • RTOS能较好地实现模块的分离和隔离,降低耦合,每个任务都有自己的任务栈,这对于业务开发、移植、维护较为友好
  • 实时性比裸机要强,任务间通信,如事件、消息队列、信号等API阻塞 + Systick调度中断,可以使得任务执行 的实时性大大提高,而不是裸机程序的轮询执行

程序设计原则

文件、函数、变量命名

  • 不同层级的文件命名、函数命名、变量命名要有标识度

分层以及模块化设计

层级之间的调用和信息上报

  • 下层提供直接接口调用,提供注册回调函数,禁止调用上层接口

避免全局变量之开发设计

尽量少用多文件共享之全局变量

变量首选局部变量,其次用静态全局变量(仅能被当前文件访问),全局变量可改为指针传递

或者是导出接口或者函数指针、句柄

静态全局变量过多情况下,可用结构体统一封装,称为句柄,可作为指针传递出去

设计模式的应用

  • 状态机
  • 命令模式
    事件与匹配函数执行的数组集

裸机开发

  • 模块间通信

    • 实时性要求不高的情况下,可以应用 类消息队列 的方式,尽量使用避免跨文件的全局变量
    • 高实时性要求下,可以采用 订阅-发布模式
  • 软件定时器的使用

    • 以Systick为全局时基

RTOS开发

代码业务设计

  • 消息队列的应用

    • 阻塞式消息队列
  • 事件的应用

多线程设计注意点

  • 临界区问题
  • 高实时性要求场合

参考站点