当前位置: 首页 > article >正文

Free RTOS:任务状态,任务管理与调度理论

目录1.任务状态1.1 FreeRTOS的任务状态1.2 阻塞状态(Blocked)1.3 暂停状态(Suspended)原型如下1.4 就绪状态(Ready)1.5 完整的状态转换图1.6 代码2.任务管理与调度理论2.1 调度2.2 FreeRTOS调度STM32CubeMXFreeRTOS源码代码理解图同优先级的任务之后FreeRTOS系统里面有一个Tick中断1ms一次中断理解图代码理解图不同优先级的任务3.空闲任务3.1 空闲任务的特点3.2 空闲任务(Idle 任务)的作用一个场景3.3 空闲任务不够4.Delay 函数4.1 两个 Delay 函数这 2 个函数原型如下4.2 vTaskDelay原理例如vTaskDelay(5)例子假设函数A第一次运行1ms第二次运行10ms第三次运行5ms假设1个Tick为1ms4.3 vTaskDelayUntil原理例子假设函数A第一次运行1ms第二次运行10ms第三次运行5ms假设1个Tick为1ms1.任务状态代码在09_task_suspend里这个代码相较于08_task_priority添加音乐暂停/恢复功能1.1 FreeRTOS的任务状态运行(Runing)非运行(Not Running)然后非运行状态分为三种阻塞状态(Blocked)暂停状态(Suspended)就绪状态(Ready)1.2 阻塞状态(Blocked)在日常生活的例子中母亲在电脑前跟同事沟通时如果同事一直没回复那么母亲的工作就被卡住了、被堵住了、处于阻塞状态(Blocked)。重点在于母亲在等待阻塞状态会将程序一直卡在一个地方等待如果有设置等待时间比如超时时间到达了这个时间就会结束阻塞状态1.3 暂停状态(Suspended)在日常生活的例子中母亲正在电脑前跟同事沟通母亲可以暂停好烦啊我暂停一会领导说你暂停一下当前执行的任务调用vTaskSuspend函数让自己暂停或是其他任务调用vTaskSuspend函数让当前运行的函任务暂停原型如下vTaskResume恢复函数让暂停的任务从暂停的位置开始运作1.4 就绪状态(Ready)这个任务完全准备好了随时可以运行只是还轮不到它。这时它就处于就绪态(Ready)当任务被创建出来时就进入了就绪状态了1.5 完整的状态转换图1.6 代码2.任务管理与调度理论优先级、链表管理、任务切换、tick空闲任务代码在10_idle_task里2.1 调度相同优先级的任务轮流运行最高优先级的任务优先级运行高优先级的任务未执行完低优先级的任务无法运行一旦高优先级任务处于就绪状态马上就会运行最高优先级的任务有多个会轮流运行2.2 FreeRTOS调度STM32CubeMXFreeRTOS源码代码理解图同优先级的任务当前的两个任务的优先级为24且同级一个优先级可以有多个任务创建完这三个任务之后创建一个优先级为0的空闲任务然后就启动调度器在创建第一个任务的时候会先放到对于优先级的链表中的就绪链表中有一个全局指针pxCurrentTCB然后这个全局指针会在同优先级的链表中继续指向后续创建的任务直至最后一个创建的任务当真正启动调度器的时候最在全局指针指向的任务开始所以最后创建的任务反而最先开始执行之后FreeRTOS系统里面有一个Tick中断1ms一次中断在Tick中断里会执行以下1.计时累加作为时钟基准2.发起一次调度遍历ReadyTasksLists从高优先级到低优先级空链表就下一个找到第一个非空的链表把全局指针pxCurrentTCB指向下一个任务最开始创建的任务计时累加达到1ms时再次进行计时累加再发一次任务调度遍历ReadyTasksLists从高优先级到低优先级找到非空的链表把全局指针pxCurrentTCB指向当前任务的下一个任务循环往复如此理解图代码理解图不同优先级的任务假设正在进行默认的任务优先级为24Tick中断为1ms在还没到1ms的时候有一个优先级25的任务C创建了那么任务C会在就绪链表ReadyTasksLists中里立马执行然后任务C里面又有一个等待函数为2个Tick这个时候任务C会从就绪状态变为阻塞状态从ReadyTasksLists中被移出到DelayTasksLists中之后任务的调度会继续会调度默认任务的下一个任务ATick中断又到了继续进行调度执行任务B这个时候2个Tick了那么这个时候的Tick中断相比于之前的Tick中断会多一个过程判断任务C是否到了时间然后从DelayTasksLists移出到ReadyTasksLists任务C从阻塞状态变为就绪状态之后立马执行任务C如果任务C还调用了暂停函数vTaskSuspend任务C从就绪状态或阻塞状态进入了暂停状态那么这个时候任务C不论是在ReadyTasksLists还是在DelayTasksLists都会进入xSuspendedTaskLists只要任务C调用了恢复函数vTaskResume才会从xSuspendedTaskLists进入ReadyTasksLists从暂停状态进入就绪状态之后立马执行任务C3.空闲任务3.1 空闲任务的特点空闲任务优先级为 0它不能阻碍用户任务运行空闲任务要么处于就绪态要么处于运行态永远不会阻塞3.2 空闲任务(Idle 任务)的作用空闲任务(Idle 任务)的作用之一释放被删除的任务的内存一个场景这个时候想要退出整个程序卡死的状态就需要使用vTaskDelete函数自杀vTaskDeleteNULL空闲任务收尸空闲任务释放被删除任务的内存他杀vTaskDelete错误任务的句柄假设是任务A删除了任务B那么就是任务A来释放任务B的内存3.3 空闲任务不够但是如果ReadyTasksLists有太多任务“自杀”空闲任务就会不够来不及释放这些任务的内存那么就是造成内存不够分配的现象就需要良好的编程习惯来防止ReadyTasksLists有太多任务“自杀”的现象1.事件驱动2.在需要延时的地方使用FreeRTOS中的内置延时函数vTaskDelay()不要使用死循环也就是当前vTaskDelay()会使得该任务释放CPU资源进入DelayTasksLists中这样ReadyTasksLists中就不会有太多的“自杀任务”空闲任务就有更多的时间去释放那些没有用到延时函数的任务的内存简而言之就是让这个任务放弃调度4.Delay 函数4.1 两个 Delay 函数vTaskDelay至少等待指定个数的 Tick Interrupt 才能变为就绪状态vTaskDelayUntil等待到指定的绝对时刻才能变为就绪状态这 2 个函数原型如下vTaskDelay和 vTaskDelayUntil都是以Tick为单位4.2 vTaskDelay原理vTaskDelay(n个Tick)例如vTaskDelay(5)例子假设函数A第一次运行1ms第二次运行10ms第三次运行5ms假设1个Tick为1ms可以发现vTaskDelay延时函数是规定了多少时间延时就是阻塞函数A多少时间可见函数A每次运行间隔的时间不是周期的4.3 vTaskDelayUntil原理vTaskDelayUntil(当前计数值n个Tick)一般要配合xTaskGetTickCount()函数获取当前计数值例子假设函数A第一次运行1ms第二次运行10ms第三次运行5ms假设1个Tick为1ms可以发现vTaskDelayUntil延时函数是先给当前的计数值然后根据设定了15个Tick15个Tick缺多少就补多少将函数的两次运行时间规定为15个Tick以实现周期运行函数

相关文章:

Free RTOS:任务状态,任务管理与调度理论

目录 1.任务状态 1.1 FreeRTOS的任务状态: 1.2 阻塞状态(Blocked) 1.3 暂停状态(Suspended) 原型如下: 1.4 就绪状态(Ready) 1.5 完整的状态转换图 1.6 代码 2.任务管理与调度理论 2.1 调度 2.2 FreeRTOS调度 STM32CubeMX FreeRTOS源码 代…...

FLUX.小红书极致真实V2效果展示:宠物毛发层次、眼睛高光、微表情刻画

FLUX.小红书极致真实V2效果展示:宠物毛发层次、眼睛高光、微表情刻画 想不想拥有一款能生成媲美专业摄影棚照片的AI工具?今天要展示的,就是这样一个“神器”——基于FLUX.1-dev模型和小红书极致真实V2 LoRA打造的本地图像生成工具。它最大的…...

PyCharm与Anaconda环境管理详解:Phi-3-mini-4k-instruct-gguf解决Python包冲突

PyCharm与Anaconda环境管理详解:Phi-3-mini-4k-instruct-gguf解决Python包冲突 1. 为什么需要环境管理工具 Python开发中最让人头疼的问题之一就是包冲突。你可能遇到过这种情况:昨天还能运行的代码,今天突然报错;或者在一个项目…...

互联网产品创新:基于MogFace-large的社交平台智能相册分类功能

互联网产品创新:基于MogFace-large的社交平台智能相册分类功能 你是不是也有过这样的烦恼?手机相册里存了几千甚至上万张照片,想找一张和某个朋友的合影,却要像大海捞针一样翻上半天。聚会、旅行、日常随手拍,照片越积…...

RWKV7-1.5B-g1a开源大模型入门指南:低显存(3.8GB)轻量文本生成实操

RWKV7-1.5B-g1a开源大模型入门指南:低显存(3.8GB)轻量文本生成实操 1. 模型简介 rwkv7-1.5B-g1a 是一款基于RWKV-7架构的开源文本生成模型,专为轻量级应用场景设计。这个1.5B参数的模型在多语言文本生成任务上表现出色&#xff…...

SecGPT-14B模型微调:OpenClaw自动化准备标注数据与训练脚本

SecGPT-14B模型微调:OpenClaw自动化准备标注数据与训练脚本 1. 为什么需要自动化微调流程 当我第一次尝试微调SecGPT-14B模型时,最让我头疼的不是模型本身,而是那些繁琐的前期准备工作。作为安全领域的从业者,我深知专业数据的价…...

Facebook广告细分定位新功能解析

Facebook广告细分定位新功能的本质,是广告受众定位正式进入了“自然语言”时代。简单来说,就是把过去从庞大的标签库里找词,变成了直接用日常语言描述你想要触达的目标人群。这背后,是Meta全新的 “Andromeda”(仙女座…...

zRenamer 1.9 批量重命名工具

一、软件背景 1. 核心痛点来源 日常文件管理中,用户长期面临批量重命名低效、混乱、易出错的核心痛点: 手动操作繁琐:零散文件(照片、文档、视频)命名无规则,手动修改数百个文件耗时极长,重复…...

nli-distilroberta-base生产环境:低延迟NLI服务在搜索Query改写中应用

nli-distilroberta-base生产环境:低延迟NLI服务在搜索Query改写中应用 1. 项目概述 在搜索引擎优化和智能问答系统中,Query改写是一个关键环节。nli-distilroberta-base是一个基于DistilRoBERTa模型的轻量级自然语言推理(NLI)服务,专门为生…...

第二篇:KNX实战进阶|分模式开发+综合项目落地,手把手教你搞定

在上一篇博客中,我们已经掌握了KNX协议基础、开发环境搭建与协议栈移植,完成了“入门铺垫”。这一篇,我们将进入核心实战环节——聚焦KNX TP(楼宇主流)和KNX IP(远程控制)两种模式的开发&#x…...

VibeVoice语音合成系统效果展示:专业配音级语音频谱图分析

VibeVoice语音合成系统效果展示:专业配音级语音频谱图分析 1. 语音合成技术的新突破 你有没有想过,现在的AI语音合成已经能做到多逼真?不再是那种机械的、冰冷的机器人声音,而是真正像专业配音演员录制的高质量语音。VibeVoice语…...

第一篇:KNX入门实战|从协议基础到开发环境搭建,新手也能轻松上手

在智能楼宇与工业自动化领域,KNX协议绝对是绕不开的核心标准——作为全球通用的开放式楼宇控制协议(ISO/IEC 14543),它融合了欧洲三大总线协议的优势,能实现照明、空调、传感器等各类设备的无缝联动,广泛应…...

OpenClaw自动化测试新思路:千问3.5-27B生成与执行UI测试用例

OpenClaw自动化测试新思路:千问3.5-27B生成与执行UI测试用例 1. 为什么我们需要重新思考UI测试 作为一位经历过手工测试、录制回放、脚本维护三个阶段的老测试工程师,我始终被一个问题困扰:测试用例的维护成本永远与业务复杂度成正比。直到…...

PPT转视频工具,就得保留全部动画效果 —— 使用YOCO有感

在做课件视频这件事上,我踩过不少坑。一开始我以为,PPT转视频无非就是“把页面录下来”,后来才发现,真正决定视频质量的,不是画面清不清,而是PPT里的“动画逻辑”有没有被完整保留。而这一点,恰…...

JavaScript typeof 操作符详解

JavaScript typeof 操作符详解 引言 在JavaScript中,typeof 是一个一元运算符,用于检测给定变量的数据类型。它是JavaScript中最常用的类型检测方法之一。本文将详细介绍 typeof 操作符的用法、返回值以及注意事项。 typeof 运算符概述 typeof 运算符可以用于检测任何Jav…...

OpenClaw+Qwen3.5-9B低成本自动化:自建模型比API省80%

OpenClawQwen3.5-9B低成本自动化:自建模型比API省80% 1. 为什么我要研究OpenClaw的成本问题 上个月我尝试用OpenClaw自动化处理积压的3000多份PDF文件,结果被商用API的账单吓了一跳——单次归档任务的token消耗折算下来居然要12美元。这让我开始思考&a…...

如何分析网站SEO关键词排名

如何分析网站SEO关键词排名 在当今的互联网时代,网站的SEO(搜索引擎优化)已经成为了提升网站流量和提高品牌知名度的重要手段之一。其中,关键词排名分析是SEO工作的核心环节。一个网站如果能够在搜索引擎上的关键词排名靠前&…...

24GB显存利用率优化:OpenClaw长任务链对接Qwen3-14B的7个技巧

24GB显存利用率优化:OpenClaw长任务链对接Qwen3-14B的7个技巧 1. 为什么需要关注显存利用率? 上周我尝试用OpenClaw自动化处理一个包含200份PDF文档的信息提取任务时,系统在运行到第37个文件时突然崩溃。查看日志才发现是显存耗尽导致的OOM…...

Git学习笔记作用及概述

作用及概述一、作用: 1.代码回溯 2.版本切换 3.多人协作 4.远程备份...

《jEasyUI 格式化列》

《jEasyUI 格式化列》 引言 jEasyUI 是一款流行的开源jQuery UI库,旨在简化Web用户界面(UI)的开发。在jEasyUI中,格式化列是一种常见且强大的功能,它允许开发者根据需要自定义表格列的显示格式。本文将详细介绍jEasyUI…...

Cogito-v1-preview-llama-3B应用探索:建筑行业BIM文档智能摘要系统

Cogito-v1-preview-llama-3B应用探索:建筑行业BIM文档智能摘要系统 1. 引言:建筑行业的文档挑战与AI机遇 建筑行业每天产生海量的BIM文档——设计图纸、施工方案、材料清单、进度报告,这些文档往往长达数百页,工程师和项目经理需…...

从零配置上网行为管理:H3C AC本地认证与第三方AAA服务器切换指南

从零构建企业级网络认证体系:H3C AC与第三方AAA服务器实战解析 在数字化转型浪潮中,企业网络管理正面临前所未有的复杂挑战。当新员工入职第一天无法连接Wi-Fi,当市场部反映视频会议频繁卡顿,当IT部门发现内网存在异常流量却无法追…...

BAAI/bge-m3新手指南:无需代码基础,也能玩转高级语义分析模型

BAAI/bge-m3新手指南:无需代码基础,也能玩转高级语义分析模型 1. 什么是BAAI/bge-m3语义分析引擎 1.1 模型的基本功能 BAAI/bge-m3是一个强大的语义分析工具,它能理解文本背后的含义而不仅仅是表面的词语。想象一下,当你说&quo…...

OpenClaw+Qwen3-4B创意写作:自媒体内容批量生成方案

OpenClawQwen3-4B创意写作:自媒体内容批量生成方案 1. 为什么需要自动化内容创作 作为一个自媒体运营者,我每天最头疼的就是内容创作。从选题策划到草稿撰写,再到格式调整和平台适配,整个过程耗时耗力。尤其当需要同时维护多个平…...

【人工智能基础-机器学习】- 线性归回知识点(有个人理解)

机器学习:线性回归 一、线性回归基础 1.1 数据准备 将x0置为1,与xn组合得到nn的矩阵 1.2 理论基础 正态分布: 基于中心极限定理,误差(预测值-实际值)服从正态分布 最大似然估计(MLE)…...

如何检查SEO文件是否设置正确

如何检查SEO文件是否设置正确 在当今互联网时代,搜索引擎优化(SEO)已经成为网站运营中不可忽视的一环。SEO文件的设置直接影响网站在搜索引擎上的排名和流量。因此,如何检查SEO文件是否设置正确,是每一个网站运营者必…...

LinkFinder收集接口

LinkFinder可以自动化收集站点的api接口先用linkfinder爬去该js文件中所有的接口,再用正则表达式进行数据清洗,得到我们想要的api接口python3 linkfinder.py -i "https://example.com/static/js/example.js" -o cli > api.txt接着我们需要去…...

2026年降AI工具价格全面对比:哪款最便宜还好用

2026年降AI工具价格全面对比:哪款最便宜还好用 72%。 我收到知网检测报告那一刻,说实话有点懵。我那篇论文写了快两个月,每个字都是自己敲的。但学校的要求摆在那——AI率低于20%才能送审。折腾了几天之后,靠嘎嘎降AI&#xff0…...

深度行业洞察:如何科学评估与挑选高品质宠物智能舱?

随着“人宠共居”生活方式的深入,宠物智能家电市场迎来了前所未有的井喷。然而,面对市面上价格悬殊、功能各异的智能设备,许多初次接触智能养宠的消费者往往无从下手。因此,建立一套科学的新手养猫指南:客观评估智能猫…...

崇左便宜的饭店本地人推荐

一、行业现象观察在崇左地区,尤其是德天瀑布、明仕田园等旅游核心区域,餐饮消费呈现明显的游客与本地人差异。本地食客更倾向于选择价格合理、口味地道、注重性价比的餐食;而游客则多关注用餐的视觉呈现、异国风情氛围及沉浸式体验。景区周边…...