嵌入式开发中常用设计模式
c吧
全部回复
仅看楼主
level 6
嵌入式开发资源有限、实时性要求高、硬件交互频繁,因此不追求复杂设计模式,只选用轻量、实用、适配裸机 / RTOS的经典模式。
1、单例模式(硬件驱动必备)
适用场景:UART、I2C、SPI、FLASH、ADC 全局唯一硬件资源。
核心思想:保证一个硬件只实例化一次,避免重复初始化、资源冲突。
嵌入式写法:
static UART_HandleTypeDef huart1; // 静态全局 = 单例
UART_HandleTypeDef* UART1_GetInstance(void) {
return &huart1;
}
全局唯一,外部只能通过接口访问,保护硬件资源,避免重复初始化,驱动标准化。
2、工厂模式(多设备统一驱动)
适用场景:OLED / LCD / 传感器 / 不同型号 Flash 统一接口。
核心思想:同一接口,不同实现,上层不用关心底层硬件。
嵌入式写法:
typedef struct {
int (*read)(void);
} Sensor;
// DHT11 实现
int dht11_read(void) { ... }
Sensor dht11 = {.read = dht11_read};
// DS18B20 实现
int ds18b20_read(void) { ... }
Sensor ds18b20 = {.read = ds18b20_read};
// 上层统一调用
Sensor* sensor = &dht11;
int temp = sensor->read();
易扩展新设备,上层代码不用改,适合模块化项目
3、观察者模式(事件通知)
适用场景:按键事件、串口接收事件、警报、定时任务、同步数据显示。
核心思想:一个事件发生,通知多个模块处理。
解耦,适合中断、RTOS 事件,代码非常轻量
4、适配器模式(兼容不同硬件)
适用场景:兼容不同 I/O 口、不同通信方式、不同驱动芯片。
核心思想:把不兼容的接口转换成统一接口。
上层代码完全不变,硬件切换超方便
2026年04月27日 09点04分 1
1