在之前的文章中,所有的调用方向都是 App -> Driver(比如 SetSpeed)。但在实际业务中,我们经常遇到反向需求:Driver -> App。
比如:当电机发生'过流堵转'故障时,驱动层需要通知上层。
- UI 模块 需要弹窗报警。
- Log 模块 需要记录日志。
- 控制模块 需要立即停机。
如果我们只用普通的'回调函数' SetCallback(func),由于函数指针变量只有一个,你只能注册一个接收者。如果你注册了 UI,Log 就收不到了。
今天我们用 C 语言实现 观察者模式 (Observer Pattern),实现 一对多 的事件通知。
一、定义观察者链表
我们需要一种机制,允许任意数量的模块'订阅'电机的事件。最简单的方法是使用 单向链表。
1.1 定义节点
我们在头文件中定义一个'观察者节点'。
// motor_driver.h
// 事件回调函数的原型
typedef void (*MotorEventHandler)(Mot

