发布时间:2026/8/29 7:32:02
5分钟学习笔记(FreeRTOS)(一) 学习1.任务状态Running / Ready / Blocked / SuspendedRunning运行态表示当前任务正在占用 CPU 执行。Ready就绪态表示任务已经具备运行条件但是还未被调度器选中执行。由于有更高优先级任务正在运行或者同优先级任务还没轮到它所以暂时没有执行Blocked阻塞态表示任务正在等待某个时间到达或者等待某个事件发生。在阻塞期间任务不占用 CPU也不会被调度器选中运行。等时间到了或者事件发生了任务会重新进入 Ready 状态。等待延时结束等待队列数据等待信号量等待事件组等待任务通知等待互斥量例如例如vTaskDelay(100);任务会阻塞 100 个 tick。注意100 tick 不一定等于 100ms具体取决于系统 tick 周期再比如xQueueReceive(queue, data, 100);如果队列没数据任务会阻塞等待如果 100 个 tick 内还没等到数据就超时退出阻塞。Suspended挂起态表示任务被手动挂起后不会参与调度也不会因为超时自动恢复。只有调用 vTaskResume() 或 xTaskResumeFromISR() 才能恢复到 Ready 状态。2.任务为什么会阻塞因为任务调用了会等待的 FreeRTOS API主动让出 CPU去等待时间、资源或者事件。vTaskDelay();xQueueReceive();xSemaphoreTake();xEventGroupWaitBits();ulTaskNotifyTake();这些函数都可能进入阻塞态总结FreeRTOS任务不是一直占用CPU运行的。当任务需要等待延时、队列、信号量、事件组或任务通知时就会进入阻塞态。阻塞态任务不会消耗CPU调度器会去运行其他Ready任务。等事件发生或者等待超时后该任务再回到Ready态等待调度器重新调度。3. BaseType_t xTaskCreate( TaskFunction_t pvTaskCode,const char * const pcName,const configSTACK_DEPTH_TYPE uxStackDepth,void *pvParameters,UBaseType_t uxPriority,TaskHandle_t *pxCreatedTask);个人理解pvTaskCode任务函数入口地址任务函数通常是一个无限循环不能直接 return。如果任务不再需要运行应该调用 vTaskDelete() 删除自己。 例如void LED_Task(void *argument) { while(1) { HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); vTaskDelay(pdMS_TO_TICKS(500)); } }如果任务想删除自己vTaskDelete(NULL);vTaskDelete(NULL)不是删除空任务而是删除当前正在运行的任务自己pcName是任务的名称主要用于1. 调试 2. 任务列表显示 3. FreeRTOS Trace 工具显示uxStackDepth为任务分配的栈深度单位通常是 StackType_t不是字节。在 STM32 上 128 通常约等于 512 字节。注意这是 FreeRTOS 原生 xTaskCreate() 的规则如果用 CMSIS-RTOS 或 CubeMX 配置任务界面里的 stack size 可能按字节理解要看具体接口。pvParameters是传递给任务函数的参数指针。例如uint8_t led_id 1; xTaskCreate(LED_Task, LED, 128, led_id, 2, NULL);任务里接收void LED_Task(void *argument) { uint8_t id *(uint8_t *)argument; while(1) { // 使用 id } }注意如果传局部变量地址要小心变量生命周期。 led_id 是局部变量创建任务的函数退出后这个地址可能失效所以传给任务的参数最好是全局变量、static变量或者长期存在的结构体。uxPriority是任务的优先级数字越大优先级越高pxCreatedTask是一个输出参数用来保存创建成功后的任务句柄。xTaskCreate() 还有一个返回值BaseType_t常见返回值pdPASS任务创建成功 errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY内存不足创建失败4.vTaskDelay() 作用vTaskDelay() 用于让当前任务进入阻塞态延时指定的 tick 数。延时时间到后任务从 Blocked 状态回到 Ready 状态延时时间到后任务从 Blocked 状态回到 Ready 状态等待调度器选中后才会重新进入 Running。。它是相对延时适合普通延时如果要实现严格周期任务应使用 vTaskDelayUntil()。5.Delay后任务去哪了任务在 Running 状态调用 vTaskDelay() 后会主动让出 CPU让其他 Ready 任务得到执行机会。本任务会进入 Blocked阻塞态在延时未结束前一直处于阻塞态不参与调度也不占用 CPU。当延时时间到了以后任务会从 Blocked 状态转为 Ready就绪态然后等待调度器调度只有被调度器选中后才会重新进入 Running运行态。总结一句话Running 是正在跑Ready 是能跑但没轮到Blocked 是等时间或事件Suspended 是被手动暂停。

相关新闻

2026/8/29 7:32:02

AI烟叶病虫害智能防治植保机上位控制系统

# AI烟叶病虫害智能防治植保机上位控制系统 QT国产信创工控完整工程,适配**统信UOS、银河麒麟ARM/x86**,严格遵循《烟草主要病虫害防控技术规程》DB42/T 2456-2025标准;双目多光谱AI烟株病虫识别+MAVLink植保无人机/自走式喷药车双兼容,集成**病虫识别分级、智能配药、变量…

2026/8/29 7:32:02

回归分析:从数学原理到Python实战的机器学习入门指南

1. 从“预测”开始:为什么回归是机器学习的基石 如果你刚接触机器学习,翻开任何一本教材或课程,大概率第一个遇到的算法就是“回归”。这绝非偶然。很多人会问,机器学习不是有分类、聚类、推荐那么多酷炫的应用吗,为什…

2026/8/29 7:27:02

2026 年5款企业数字人软件横评:多语种跨境场景适配实测对比

一、引文与摘要跨境贸易企业做海外短视频营销,最头疼的不是内容创意,而是多语种内容的生产效率。2026年实测5款主流企业数字人软件后,一个明确的结论是:晟诺科讯达在多语种适配、克隆效率和成本控制三个维度的综合表现领先&#x…

2026/8/29 7:42:02

网络嗅探器的设计与实现:从libpcap抓包到协议解析完整指南

简介:在计算机网络中,数据包通过层层封装在网络中传输,理解其流动机制是流量分析的基础。网络嗅探器的核心原理是将网卡切换至混杂模式,使主机能够接收所有经过的数据帧,再借助BPF过滤器在内核层面高效筛选目标流量&am…

2026/8/29 7:42:02

Pohlig-Hellman算法:离散对数问题的脆弱性分析与安全规避

1. Pohlig-Hellman算法:离散对数难题的“阿喀琉斯之踵” 在密码学和数论的世界里,离散对数问题(DLP)一直扮演着“守门人”的角色。它构成了许多公钥密码系统(如经典的Diffie-Hellman密钥交换、ElGamal加密、DSA数字签名…

2026/8/29 7:42:02

基于CNN与IoT的智能果实采摘系统:从算法到工程落地全解析

简介:计算机视觉与物联网技术正深度融合,推动传统产业智能化转型。其核心原理在于通过传感器采集物理世界数据,利用深度学习模型进行智能分析,并通过网络实现数据与指令的互联互通。这一技术组合的价值在于将AI的感知决策能力与Io…

2026/8/29 7:42:02

基于LIS2DH12超低功耗MEMS加速度计的地下管网泄漏监测方案

今年在做地下管网渗漏监测方案时,我选了ST的LIS2DH12这颗MEMS加速度计,起因是想找一颗真正意义上“超低功耗、数字输出、体积小”的三轴传感器来做人手一台的低成本泄漏预判设备。踩了几轮坑后,越来越觉得这颗“nano”加速度计在特定场景里非…

2026/8/29 7:42:02

电脑供电真相:为什么CPU不用5V/3.3V直供?

1. 这不是“电脑电源输出多少伏”的简单问答,而是搞懂整套供电逻辑的实操起点很多人第一次拆开电脑主机,看到电源上密密麻麻的线标着12V、5V、3.3V、-12V、5VSB,第一反应是:“这么多电压,到底哪个才是给CPU用的&#x…

2026/8/29 7:37:02

C# WinForm 集成 PaddleOCR v3 ONNX 实战指南

简介:OCR(光学字符识别)是一种将图像中文字转换为可编辑文本的基础AI技术,其核心依赖于检测与识别双模型协同推理。PaddleOCR v3 作为国产高精度OCR框架,通过标准化ONNX格式输出,实现了跨平台、低依赖的模型…

2026/8/28 16:16:17

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/28 16:16:21

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/28 16:16:22

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/29 0:01:10

etc目录下的profile.d文件目录设置环境变量和全局脚本shell

一、设置环境变量etc目录下的profile.d文件目录 /etc/profile.d1、编写 vi test.sh文件内容# jdk变量 export ZHK_HOME/root export PATH$PATH:$ZHK_HOME/test # 可以取出来ZHK_HOME变量给ZZZ_HOME赋值 export ZZZ_HOME${ZHK_HOME}/test2、刷新 执行source /etc/profile 命令使…

2026/8/29 0:01:10

【JavaScript】内存管理-垃圾回收机制-内存泄露

内存管理 C 语言这样的底层语言一般都有底层的内存管理接口,比如 malloc()和free()。 而 JavaScript 是在创建变量(对象,字符串等)时自动进行了分配内存,并且在不使用它们时“自动”释放。释放的过程称为垃圾回收。 整…

2026/8/29 0:01:10

Labgrid-MCP:为嵌入式硬件实验室接入AI Agent操控能力

Labgrid-MCP 的目标是把 MCP(Model Context Protocol)能力延伸到真实嵌入式硬件实验室:AI Agent 通过一个标准化的 MCP Server,就能查看目标板状态、控制上电断电、复位开发板、读取串口日志,甚至执行镜像刷写。对于经…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/28 16:16:50

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/28 11:06:45

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…