尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FreeRTOS 学习笔记:裸机系统与多任务系统
在正式学习 FreeRTOS 之前先要弄清楚一个问题为什么单片机程序需要操作系统很多 STM32 初学项目都是裸机程序也就是没有操作系统程序主要依靠main函数里的死循环和中断来完成任务。但随着功能越来越多比如按键、串口、传感器、显示屏、电机控制同时存在时裸机程序会变得越来越难维护。这一节主要理解三种软件结构轮询系统、前后台系统、多任务系统。1. 轮询系统轮询系统是最基础的裸机程序结构。程序初始化外设后进入一个while(1)死循环在循环中按照固定顺序执行各个功能函数。简单例子如下int main(void) { Board_Init(); while (1) { Led_Process(); Key_Process(); Uart_Process(); Sensor_Process(); } }这种方式的特点是简单、直观适合 LED 闪烁、串口打印、简单传感器读取这类小项目。但是它的问题也很明显所有函数必须排队执行。如果Sensor_Process()执行时间很长后面的程序就会被拖慢。如果某个外部事件突然发生比如按键按下或者串口收到数据程序也不能立刻处理只能等主循环运行到对应函数时才处理。所以轮询系统适合顺序执行的简单任务不适合实时性要求高的场景。2. 前后台系统前后台系统是在轮询系统基础上加入中断机制。这里的“前台”一般指中断服务函数负责快速响应外部事件“后台”指main函数里的死循环负责处理主要业务逻辑。比如按键中断来了以后不在中断里做复杂处理只设置一个标志位volatile uint8_t key_event 0; void EXTI0_IRQHandler(void) { key_event 1; Clear_EXTI_Flag(); } int main(void) { Board_Init(); while (1) { if (key_event) { key_event 0; Key_Event_Process(); } Led_Process(); Uart_Process(); } }这种方式比纯轮询好很多因为外部事件可以被中断及时捕获不容易丢失。例如按键按下、串口接收完成、定时器到达都可以先在中断中记录下来。但是前后台系统仍然有一个问题事件虽然能被及时“发现”但真正的处理过程仍然在主循环中排队完成。如果后台某个函数执行时间很长其他事件的处理还是会被延迟。因此前后台系统适合中小型裸机项目。它比轮询系统实时性更好但本质上仍然是单一主循环结构。3. 多任务系统多任务系统就是 FreeRTOS 这类实时操作系统要解决的问题。在多任务系统中不再把所有功能都塞进一个while(1)里面而是把不同功能拆成多个相对独立的任务。比如 LED 是一个任务按键是一个任务串口是一个任务传感器采集是一个任务。简化代码如下void LedTask(void *argument) { while (1) { Led_Toggle(); vTaskDelay(pdMS_TO_TICKS(500)); } } void KeyTask(void *argument) { while (1) { Key_Scan(); vTaskDelay(pdMS_TO_TICKS(20)); } } int main(void) { Board_Init(); xTaskCreate(LedTask, led, 128, NULL, 1, NULL); xTaskCreate(KeyTask, key, 128, NULL, 2, NULL); vTaskStartScheduler(); while (1) { } }这里有几个关键点xTaskCreate()用来创建任务。vTaskStartScheduler()用来启动任务调度器。任务函数内部通常都是while(1)因为任务本身就是长期运行的小程序。vTaskDelay()不是普通的死等延时它会让当前任务进入阻塞状态把 CPU 让给其他任务。这就是 RTOS 和普通裸机延时最大的区别。裸机里如果写delay_ms(500)CPU 基本就在原地等着而 FreeRTOS 里使用vTaskDelay()当前任务暂停系统可以去运行其他任务。4. 中断和任务如何配合在多任务系统中中断仍然存在但是中断一般只做很短的事情比如接收数据、清除标志位、通知任务不建议在中断里写复杂逻辑。例如串口接收中断可以通知串口任务TaskHandle_t UartTaskHandle; void USART1_IRQHandler(void) { BaseType_t xHigherPriorityTaskWoken pdFALSE; if (Uart_Rx_Done()) { vTaskNotifyGiveFromISR(UartTaskHandle, xHigherPriorityTaskWoken); } portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } void UartTask(void *argument) { while (1) { ulTaskNotifyTake(pdTRUE, portMAX_DELAY); Uart_Data_Process(); } }这个思路非常重要中断负责快速响应任务负责具体处理。这样既保证了响应速度也避免中断函数太长影响系统稳定性。5. 三种模型对比模型事件响应事件处理特点轮询系统主循环发现主循环处理简单但实时性差前后台系统中断发现主循环处理响应更快适合中小项目多任务系统中断或任务触发对应任务处理结构清晰实时性更好6. 我的理解轮询系统像是一个人按顺序做所有事情必须一件做完再做下一件。前后台系统像是有人提醒你“有新事情来了”但最终还是要你按顺序处理。多任务系统则像是把事情分给多个“任务角色”每个任务负责自己的功能调度器根据优先级和状态决定谁先运行。对于 STM32 裸机项目来说如果功能少用轮询或者前后台系统就够了。但如果项目中有多个模块同时运行比如串口通信、传感器采集、按键控制、屏幕刷新、电机控制等就很适合引入 FreeRTOS。它可以让程序结构更清晰也能提高实时响应能力。
RELATED

相关推荐

d2s-editor:革新暗黑破坏神2存档编辑体验的可视化工具

d2s-editor:革新暗黑破坏神2存档编辑体验的可视化工具

d2s-editor:革新暗黑破坏神2存档编辑体验的可视化工具 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor d2s-editor是一款专为《暗黑破坏神2》及其重制版玩家设计的开源存档编辑工具,通过直观的Web界面彻底…

📅 2026/10/13 19:53:41
电脑的安装与卸载

电脑的安装与卸载

一.应用的卸载介绍1.电脑桌面有控制面板双击点进去2.点击左下角看到菜单栏输入控制面板3.按住winr弹出终端输入control就能弹出控制面板点进程序再点卸载程序,右击选择卸载,按照卸载向导的提示进行操作。二.安装应用的介绍1.安装所需的软件的程序文件后面…

📅 2026/9/11 6:19:23
Uber 如何规模化数字身份验证:从 Apple Wallet 证件到跨场景 Identity Verification Platform

Uber 如何规模化数字身份验证:从 Apple Wallet 证件到跨场景 Identity Verification Platform

本文是对 Scaling Verify with Wallet for Identity Verification at Uber 的整理与翻译。 内容结构概览 本文会围绕 Uber 如何将 Apple 的 Verify with Wallet API 接入并规模化到自己的身份验证平台展开,主要包括: 为什么身份验证是 Uber Trusted Id…

📅 2026/10/18 18:58:32
MORE NEWS

更多资讯

📰

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存在AI本地化圈子里处境挺尴尬的:你说它能跑模型吧,7B量化之后勉强能聊;你说它跑不好吧,又确实比集显强太多。大多数教程讲的都是怎么用Ollama跑一个聊天模型,但很少有人说可以更进一步——把它变成一只能听懂人话…

📰

大模型系统性入门:从原理、部署到微调应用的完整路线

1. 为什么你收藏了300个教程,依然觉得大模型没入门我先讲一个前几天在交流群里看到的真实场景:有人问"大模型怎么入门",群里立马有人甩出几个网盘链接,里面躺着几百个PDF和视频,说是"全网最全的大模型学…

📰

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

📰

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

📰

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

📰

OpenClaw机械爪技术解析与应用实践

## 1. 项目背景与核心概念最近在机器人抓取领域看到一个挺有意思的讨论——"openclaw"这个概念。作为一个在工业自动化领域摸爬滚打多年的工程师,我第一眼就被这个命名吸引了。Openclaw直译就是"开放式爪具",但它的内涵远不止字面意…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬