本文介绍一套基于FreeRTOS的综合代码实例,目标是通过模块化的编程方式实现对多种硬件功能的管理。该实例沿用《FreeRTOS综合代码实例-OLED版本》的框架,重点改进为TFT LCD显示,同时保留了多级菜单的实现。项目链接:FreeRTOS综合代码实例: 通过模块化的编程方式实现对多种硬件功能的管理,实现多级菜单设计 (gitee.com)https://gitee.com/qiu-mingxuan/FreeRTOS-composite-code-example
代码背景与目标
- 模块化设计:
每个任务专注于管理一个硬件模块,代码结构清晰易维护。 - 多级菜单支持:
实现了基于TFT LCD的多级菜单显示和交互功能,方便用户快速访问各种硬件功能。 - 兼容性与扩展性:
本代码框架具有良好的扩展性,用户可在此基础上快速增加新的功能模块。
菜单设计
菜单功能分为两页,具体内容如下:
-
菜单第1页:
- RTC(已实现)
- FaceID(未实现)
- TouchID(未实现)
- 心率血氧(未实现)
- DHT11(已实现)
-
菜单第2页:
- Light(未实现)
- Battery(未实现)
- Camera(未实现)
- RFID(未实现)
- Storage(未实现)
实现展示
操作说明
-
按键功能:
- 按键1、按键2:菜单项选择
- 按键3:进入菜单项
- 按键4:退出菜单项
-
旋钮式选择:使用可调电阻模拟旋钮选择菜单项,类似于iPod的操作体验。
-
蜂鸣器提示:执行操作时,通过蜂鸣器发出提示音(嘀声)。
-
自动熄屏:无操作一段时间后,屏幕会自动熄灭,按任意按键唤醒。
-
多级菜单访问:支持菜单项的多级嵌套访问。
关键模块与实现
1. 任务管理
核心任务app_task_menu
位于main.c
文件中,主要负责菜单项的选择、进入和退出管理,同时实现光标的移动显示功能。
2. 菜单显示
菜单显示的核心函数menu_show
位于menu.c
文件中,主要功能包括:
- 图标显示:为每个菜单项配备相应的图标,便于识别。
- 文本显示:显示菜单项对应的功能描述。
3. 菜单数据结构
菜单项的数据结构类型为menu_t
,定义在menu.h
文件中。它采用链式存储方式,支持以下层级关系:
- 左/右菜单(水平切换)
- 父/子菜单(垂直嵌套)
4. LCD访问保护
为确保多任务环境下对TFT LCD的安全访问,定义了关键宏LCD_SAFE
(位于includes.h
文件)。启用该宏后,通过互斥锁保护LCD的访问操作,防止资源争用导致的显示异常。
5. 调试信息输出
通过宏DEBUG_PRINTF_EN
(位于includes.h
文件)使能调试信息的输出,便于通过串口监测程序运行状态。
代码亮点
-
模块化任务设计
每个硬件模块对应一个任务,任务之间互不干扰。用户可通过添加新任务快速集成新的硬件功能。 -
高效菜单交互
菜单交互设计简洁直观,支持多种输入方式(按键、旋钮等),并通过蜂鸣器提示反馈操作结果。 -
资源保护机制
LCD访问采用互斥锁机制,确保在多任务环境下资源访问的安全性。
结语
本实例展示了如何基于FreeRTOS实现模块化的任务管理和多级菜单功能,适合开发者学习和参考。