观察者模式在 RT-Thread 中的实现 | 技术集结

来源:RT-Thread操作系统 RTOS 93 次阅读
摘要:在嵌入式系统中,模块间的高耦合和轮询机制往往带来资源浪费与响应延迟。观察者模式通过“发布-订阅”机制,能够以轻量级方式实现模块解耦与事件驱动。本文结合传感器更新、系统状态变化等典型场景,对比事件通知机制,并给出C语言代码实现,帮助开发者高效应用观察者模式。 目录 为啥要使用观察者模式 场景举例 观察者模式在嵌入式中的核心优点 观察者模式和事件通知对比 观察者模式代码实现 1 为啥要使用观察者模式

在嵌入式系统中,模块间的高耦合和轮询机制往往带来资源浪费与响应延迟。观察者模式通过“发布-订阅”机制,能够以轻量级方式实现模块解耦与事件驱动。本文结合传感器更新、系统状态变化等典型场景,对比事件通知机制,并给出C语言代码实现,帮助开发者高效应用观察者模式。

目录

为啥要使用观察者模式

场景举例

观察者模式在嵌入式中的核心优点

观察者模式和事件通知对比

观察者模式代码实现

1 为啥要使用观察者模式

为了解决嵌入式系统中常见的 模块解耦、事件驱动、低功耗响应 等核心问题。虽然 C 语言没有类和继承,但通过函数指针和结构体,完全可以轻量级实现观察者模式

2 场景举例

  1. 传感器数据更新
  • 温度传感器每 500ms 采样一次

  • 多个模块关心这个值:LCD 显示、日志记录、云端上报、过温告警

  • 若每个模块都轮询读取 → 浪费 CPU、代码耦合高

  • 用观察者模式:传感器“发布”数据,各模块“订阅” → 事件驱动、按需响应

  1. 系统状态变化通知
  • 网络连接状态(断开/重连)

  • 电池电量低

  • OTA 升级完成

  • 多个业务模块需做出反应(如 UI 刷新、保存上下文、关闭外设)

  1. 硬件中断与业务逻辑分离
  • 按键中断触发 → 不能在 ISR 中做复杂处理

  • 通过观察者通知应用层任务 → 安全、可扩展

3 观察者模式在嵌入式中的核心优点

4 观察者模式和事件通知对比

4.1 功能特性对比

4.2 使用场景分析

4.2.1 观察者模式适用场景

// 1. 传感器数据变化通知多个处理模块 

4.2.2 事件通知适用场景

// 1. 线程间同步等待特定条件 

4.3 性能特点对比

  • 观察者模式优势:

  • ✅ 即时通知:无需等待,直接回调执行

  • ✅ 数据丰富:可传递复杂数据结构指针

  • ✅ 解耦性好:观察者与被观察者松耦合

  • ✅ 扩展性强:易于添加新的观察者类型

  • 事件通知优势:

  • ✅ 标准IPC:符合RT-Thread IPC规范

  • ✅ 阻塞等待:支持超时和非阻塞模式

  • ✅ 条件组合:AND/OR逻辑组合等待

  • ✅ 系统集成:与其他IPC机制统一管理

4.4 选择建议

  • 选择观察者模式当:

  • 需要立即响应状态变化

  • 要传递复杂的数据结构

  • 构建松耦合的组件架构

  • 实现发布-订阅模式

  • 选择事件通知当:

  • 需要线程间同步等待

  • 要求阻塞或超时机制

  • 处理多种事件源的组合条件

  • 利用RT-Thread标准IPC机制

5 观察者模式代码实现

observer.c

/**

observer.h

/**

observer_demo.c

/**

测试

msh />observer_test
相关推荐
评论区

登录后即可参与讨论

立即登录