资讯详情

STM32上跑FreeRTOS:实时任务调度全解析

📅 2026/10/18 14:03:25 | 华诺云谱 👁 阅读
STM32上跑FreeRTOS:实时任务调度全解析
一、前言STM32F103ZET6上边可以架什么操作系统答可以架FreeRTOS()系统和RT-Thread等不可以架Linux因为没有Linux需要的存储单元。RTOS(Real Time Operation System)实时操作系统。围绕FreeRTOS学会使用各种API正点原子开发板http://www.openedv.com/docs/boards/stm32/zdyz_stm32f103_warshipV4.html任务的管理任务的创建、删除、挂起、恢复任务之间的通信事件标记组、队列、信号量、任务通知轻量信号量一任务的执行方式1.轮询方式int main(){ while(1){ feed(); } }如果我们在轮询一件事情的时候遇见第二件事情解决方式有1前后台通常是裸机系统前台去写中断函数后台进行轮询。//后台喂饭 int main(){ while(1){ feed(); } } //前台 void 中断(){ while(1){ message(); } }2状态机让函数短一些可以将一个函数拆分成若干个小步骤。void feed(){ static int flag1; //c的静态常量存储在静态存储区 switch(flag){ case 1: 盛饭; flag; break;//每次运行的时间只有1s。下一秒再进另一个函数运行1s在退回来 case 2: 舀饭; flag break; case 3: .... break; } } void message(){ .... } int main(){ feed(); message(); //启动调度器让操作系统的内核启动起来让cpu自己去工作 start_scheduler(); }二、嵌入式实时操作系统概述2.1 什么是操作系统最底层的软件用来控制和管理硬件的为用户的应用程序提供服务。2.2 什么是实时操作系统当外界事件或数据产生时候能够接受并以足够快的速度处理其处理结果又能在规定时间内来内阁制生产过程或对处理系统做出快速响应。和非实时系统的区别非实时的系统的任务中没有时间限制。2.3 操作系统的基本功能1任务管理任务进程是程序的一次执行。2CPU管理CPU管理的含义在于多任务OS对CPU的分配分配对CPU的所有权。3内存管理根据内存占用大小的不同去分配内存。4文件管理对文件进行新建、修改、 删除回收等可抢占型原任务可以被中间唤起的任务中断去执行唤起的任务完成后再执行原任务不可抢占型时间片轮转原任务不能被唤起的任务抢占只有执行完原任务才能够执行下一个任务通常优先级相同的情况下用时间片轮转的方式进行任务。优先级不同就是可抢占型高优先级打断低优先级。2.4 实时操作系统的基本特征1实时操作系统首先是多任务操作系统2多级中断机制3优先级调度机制裸机前后台形式通常是前台中断服务函数后台是大的while(1)循环应用程序痛点①实时性比较差②delay空等待cpu不执行其他代码③结构臃肿实现功能放在无限循环RTOS:实时操作系统强调实时性优点①分而治之实现功能划分为多个任务②延时函数任务调度③抢占式高优先级任务抢占低优先级任务⑤任务堆栈每个人物都有自己的栈空间寻找更高优先级的任务寻找到并直接跳到最高优先级任务去执行每一个任务切换的时机必然是切换到最高优先级的任务体现了它的实时性。三个原则①高优先级的任务绝对不能够一直运行低优先级没有运行的机会②中断的优先级高于任何一个任务可以打断任何任务想让一个任务优先级很高不如直接做成中断。③任务的优先级可以设置成相同的三、FreeRTOS 基础知识3.1 任务的调度算法使用相关的调度算法来决定当前需要执行哪个任务算法是由写操作系统内核工程师完成的即内核源码1抢占式调度针对优先级不同的任务※高优先级抢占低优先级。在Free RTOS中优先级越高数字越大①任务优先级高先执行②高优先级任务不停止低优先级任务无法执行③被抢占的任务进入等待2时间片调度※当优先级相同情况下由时间片调度遇见阻塞直接跳到下一个任务。FreeRTOS 的时间片1ms轮转一次Systick滴答定时器3协程式调度已经不常见了当前执行任务会一直运行同时高优先级的任务不会抢占低优先级任务。3.2 任务的状态分时操作系统1运行态正在执行的任务一定处于运行态STM32中同一时刻只有一个任务处于运行态因为只有一个内核2就绪态所有任务创建自动进入就绪态能被运行但还没被运行相当于ready的状态。3阻塞态因为延时或者等待外部事件的发生而导致运行态无法运行4挂起态类似于暂停调用vTaskSuspend()进入挂起态需要用vTaskResume()进行解除之后进入就绪态。注意①只有就绪态可转变成运行态②其他状态的任务想要运行必须要先变成就绪态③任务创建完成该任务自动变成就绪态④让运行态变成阻塞态可以用延时或者添加运行条件除了运行态其他三个状态都会有对应的任务状态列表·就绪列表 pxReadyTasksLists·阻塞列表 pxDelayedTasksLists·挂起列表 xSuspendedTasksLists会从高优先级一个一个地去寻找任务
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑