1. 代码整体架构
主要承担'顶层业务层'和'底层驱动层'的桥梁作用,同时包含了环形缓冲区(RingBuffer)的基础操作——整体分为两大核心模块:传感器数据采集任务、设备开关控制任务,以及通用的环形缓冲区工具函数。

中间层的核心价值:隔离业务层和驱动层,让业务层无需关心硬件细节,驱动层无需关心业务逻辑,提升代码可维护性; 通信方式:通过 MMC(内存控制块)+ 信号量(sem_req/sem_ack)实现跨任务 / 跨层级的同步与数据传递。
2. 核心模块拆解
2.1 全局变量与数据结构(通信载体)
// MMC 控制块:管理'中间层 - 驱动层'的内存和同步(MMC=Memory Control Block)
mmc_ctrl_stru midlayer_sample_tempraure_mmc_ctrl; // 温度采集 MMC
mmc_ctrl_stru midlayer_sample_bright_mmc_ctrl; // 亮度采集 MMC
mmc_ctrl_stru midlayer_switch_light_mmc_ctrl; // 灯光开关 MMC
mmc_ctrl_stru midlayer_switch_fan_mmc_ctrl; // 风扇开关 MMC
// 采集数据结构体:存储温度/亮度的原始数据(中间层<->驱动层共享)
midlayer_sample_temprature_stru midlayer_sample_temprature_values;
midlayer_sample_bright_stru midlayer_sample_bright_values;
// 开关控制结构体:存储灯光/风扇的开关状态(中间层<->驱动层共享)
midlayer_switch_light_stru midlayer_switch_light_sw;
midlayer_switch_fan_stru midlayer_switch_fan_sw;
// FreeRTOS 任务句柄:用于任务管理(挂起/恢复/删除等)
TaskHandle_t MidLayer_Sample_Process_Task_Handler;
TaskHandle_t MidLayer_Switch_Process_Task_Handler;
mmc_ctrl_stru 是核心封装:用于管理任务 / 模块间的'共享内存 + 同步信号量',是跨模块通信的核心载体。
| 成员名 | 类型 | 作用 |
|---|---|---|
sem_req | SemaphoreHandle_t | 请求信号量:发起方释放此信号量,通知接收方'有请求需要处理' |
sem_ack | SemaphoreHandle_t | 应答信号量:接收方处理完请求后,释放此信号量通知发起方'处理完成' |
p_shared_mem | void * | 共享内存指针:指向双方共用的数据缓存区(用于传递参数 / 结果) |
shared_mem_byte | int | 共享内存的字节大小:确保双方对内存的读写不会越界 |





