尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FreeRTOS实战教程-第十一章
第十一章 综合实战:九合一多任务系统11.1 系统目标把前面九次改造的成果合成一个完整的“多功能终端”:LED0 以 500ms 闪烁(心跳指示);LED1 由软定时器每 1s 翻转一次;蜂鸣器每 3s “滴”一声(响 100ms);按键:KEY0 切换屏幕背色主题,KEY1 静音/恢复蜂鸣器,WK_UP 切换显示页面;串口:接收命令行(如led0 on/off、get),回显并周期打印系统状态;LCD:显示光敏值、温湿度、系统运行时间与丢帧统计;光敏每 100ms 采样、DHT11 每 1s 采样(严格时序保护);全部功能独立成任务/定时器,通过队列、互斥量、事件组协作。11.2 任务划分与优先级设计任务 / 对象职责优先级(CMSIS)栈大小周期 / 触发通信手段dht11_task温湿度读取(时序敏感)osPriorityHigh1 KB1s互斥量(LCD);自身时序窗口key_task按键扫描osPriorityAboveNormal512 B10ms队列 → 命令处理extiSem → exti_task中断型按键(可选保留)osPriorityAboveNormal512 BEXTI 信号二值信号量uart_proc_task串口帧处理/命令osPriorityNormal1 KB帧到达帧标志/队列sensor_task光敏采样osPriorityNormal512 B100ms队列 → 显示heartbeat_task串口心跳/系统状态打印osPriorityLow1 KB5sprintf(单写者)display_taskLCD 聚合刷新osPriorityBelowNormal1 KB250ms队列(取最新)+ 互斥量led1_timer(软定时器)LED1 翻转(定时器服务任务)—500ms—led_task / beep_task心跳灯 / 提示音osPriorityLow512 B500ms / 3s事件组读“静音”状态优先级设计三原则(本表背后的逻辑):时序敏感 响应要求 常规计算 显示/后台:DHT11 最“娇气”给 High;按键要跟手给 AboveNormal;显示慢一点没人抱怨,给 BelowNormal;让阻塞点成为“协作点”:高优先级任务必须快速阻塞(等信号、延时),否则低优先级任务没机会跑;优先级是稀缺资源:能用 3~4 档解决就别用 8 档,层级越少越易调试。11.3 通信拓扑[EXTI 中断]──二值信号量──▶[exti_task] [key_task]──队列(8×键值)──▶[cmd_task]◀──队列──[uart_proc_task]◀─串口中断 │ │ └─事件组(静音/页面切换)─────────────┐│ [sensor_task]──队列(最新亮度)──▶[display_task]│ [dht11_task]───────────────────▶│(互斥量保护 LCD)│ [heartbeat_task]──printf──────────────────────────▶串口(单写者)11.4 核心骨架代码(freertos.c)/* ============ 内核对象 ============ */osThreadId_tdht11TaskHandle,keyTaskHandle,uartProcTaskHandle,sensorTaskHandle,heartbeatTaskHandle,displayTaskHandle,extiTaskHandle,ledTaskHandle,beepTaskHandle;osMessageQueueId_tkeyQueue,lightQueue;osSemaphoreId_textiSem,tim6Sem;osMutexId_tlcdMutex;osEventFlagsId_tsysFlags;/* bit0: 静音; bit1: 页面切换 */osTimerId_tled1Timer;/* ============ 初始化 ============ */voidMX_FREERTOS_Init(void){
RELATED

相关推荐

【Python量化策略实战 #05】等权总嫌乱炖?风险平价与 Kelly 公式仓位对比实战

【Python量化策略实战 #05】等权总嫌乱炖?风险平价与 Kelly 公式仓位对比实战

一、为什么需要重新思考仓位(痛点开场) 前几篇我们跑通了"选股 择时"两条线。但还有个问题没解决:选出来的股票,要不要平均投? "等权"是最简单的答案——每只 1/N。但它有个明显问题:…

📅 2026/10/3 11:46:57
被「演唱会散场后」这类心情戳中的人,把《解不开你》放进耳机

被「演唱会散场后」这类心情戳中的人,把《解不开你》放进耳机

当清晨想把心气捡回来的人走到闹钟响后、出门前的那杯水,《解不开你》往往会比空泛安慰更先开口——不是要你热闹起来,而是把说不清的那截情绪,轻轻按进旋律里。正午歇口气的那十分钟,刚下班还不想说话的人在厨房洗碗、水龙头开着…

📅 2026/10/3 11:46:57
ubuntu 24.04, audacity 4 AppImage 加载 libavdevice.so.62 /.61 /.63 失败:依赖缺失?

ubuntu 24.04, audacity 4 AppImage 加载 libavdevice.so.62 /.61 /.63 失败:依赖缺失?

libavdevice.so.62加载失败:版本不匹配或依赖缺失如何排查?libavdevice.so.62加载失败:版本不匹配或依赖缺失如何排查?_编程语言-CSDN问答 sudo apt update && sudo apt install ffmpeg libavformat-devubuntu&#x…

📅 2026/10/3 11:46:57
MORE NEWS

更多资讯

📰

工程伦理核心知识点全解析:责任困境、伦理决策与经典案例

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

CPRI帧结构深度解析:同步字、控制域与实测排障

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DPO偏好优化:如何用二分类替代强化学习实现大模型对齐

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Cadence安装全指南:Linux系统级适配与故障排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

RK3588 HDMI IN热插拔问题剖析:从HPD到UEvent的完整链路

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

图书馆管理信息系统数据库设计:从ER建模到SQL事务与索引优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬