适用岗位:嵌入式软件工程师(MCU/RTOS 方向)实习 仓库:https://github.com/kekezack/STM32F103ZET6-MultiSensor-Monitor
基于 CMSIS-RTOS V2 的 STM32F103ZET6 多传感器监控系统 | 个人独立开发 | 2026.07-08
基于 FreeRTOS(CMSIS-RTOS V2 标准抽象层)的嵌入式多任务系统,实现 5 页面 LCD 图形界面、多传感器采集、CLI 调试与智能休眠。采用五层驱动架构 + UI 分层框架,UI 通过函数指针表驱动页面调度,控件库以回调实现 OOP 式封装。
| 维度 | 数据 |
|---|---|
| 代码量 | 约 4800 行 C 代码(User/ 22 文件) |
| 驱动模块 | 8 个外设驱动 |
| UI 页面 | 5 页(开机/温湿度/光照/系统/LED控制) |
| 任务划分 | 3 个 FreeRTOS 任务 + 启动任务 |
| 调度周期 | UI 任务 10ms 轮询 |
osThreadNew/osMessageQueueNew 等标准接口而非裸调 FreeRTOS,理解 RTOS 抽象层价值xPage 函数指针表统一调度渲染/刷新/输入;页面实现三接口(Render/Refresh/Process),新增页面仅需注册uxTaskGetStackHighWaterMark)Situation:需要把多传感器数据采集、显示、交互整合到一个 STM32 系统,且要便于扩展。
Task:设计一个可维护、可扩展的嵌入式系统架构,而非"能跑就行"。
Action:
Result:
嵌入式 STM32 FreeRTOS CMSIS-RTOS V2 C语言 RTOS 多线程 任务调度 驱动开发 LCD 传感器 I2C SPI UART ADC DMA 中断 GPIO 嵌入式Linux CMake Git 嵌入式系统 固件开发 物联网
| 问题 | 参考回答要点 |
|---|---|
| 为什么用 CMSIS-RTOS V2 不用原生 FreeRTOS? | 标准抽象层,换内核不用改上层; |
| 函数指针表有什么好处? | 新增页面零侵入;调度逻辑集中;table-driven design |
| 全量/增量渲染为什么这样设计? | LCD 写像素慢,增量只刷变化区域,降低刷新开销 |
| 任务优先级怎么定的? | UI 交互要响应快(AboveNormal),监视周期任务 Normal,Shell 最低 |
| 五层驱动怎么理解? | 配置与运行分离、设备枚举标识、单向依赖(高层调低层,允许跳过中间层) |
| 遇到过什么 bug 怎么解决? | 如实讲一个调试案例(如 DHT11 时序、触控校准、栈溢出) |
生成于 2026-08-02。面试前逐条吃透,尤其"为什么"类问题。