付费阅读小说网站开发建设源码,怎么做网站免,网站未授权cas要怎么做,自己建一个网站1.FreeRTOS介绍 FreeRTOS是一个免费的嵌入式实时操作系统#xff0c;同时它在市面上也是一款主流的操作系统#xff0c;是工作上必不可少的技能。它具有以下六种特点#xff1a; 1.免费开源#xff1a;在商业产品中使用#xff0c;无潜在商业风险#xff0c;无需担心。 2…1.FreeRTOS介绍 FreeRTOS是一个免费的嵌入式实时操作系统同时它在市面上也是一款主流的操作系统是工作上必不可少的技能。它具有以下六种特点 1.免费开源在商业产品中使用无潜在商业风险无需担心。 2.可裁剪可以在小的芯片上使用FreeRTOS的核心代码9000行左右。 3.简单简单易用可移植性强。 4.优先级不限任务优先级分配没有限制多任务可同一优先级软件/通用优先级上没有限制硬件上的优先级受限于芯片的架构如STM32单片机是32位的优先级范围只有[0-31]优先级的数字越大优先级越高。 5.任务不限可创建的实时任务数量没有软件限制。 6.抢占/协程/时间片支持抢占式协程式时间片流转任务调度。 2.任务调度器简介 任务调度器就是使用相关的调度算法来决定当前需要执行哪个任务FreeRTOS一共支持三种任务调度方式分别为 1.抢占式调度主要是针对优先级不同的任务每个任务都有一个优先级优先级高的任务可以抢占优先级低的任务。 2.时间片调度主要针对优先级相同的任务当多个任务的优先级相同时任务调度器会在每一次系统时钟节拍到的时候切换任务。 3.协程式调度当前执行任务将会一直运行同时高优先级的任务不会抢占低优先级任务官方已经表示不再更新协程式调度。 2.1抢占式调度 在FreeRTOS中创建了三个任务分别是Task1、Task2、Task3它们的优先级分别为1、2、3优先级的数值越大优先级越高所以Task3的优先级越高。 运行过程如下 1.首先Task1在运行中在这个过程中Task2就绪了在抢占式调度器的作用下Task2会抢占Task1的运行如上图所示Task1被Task2抢占后会从运行态变为就绪态。 2.Task2运行过程中Task3就绪了在抢占式调度器的作用下Task3会抢占Task2的运行如上图所示如上图所示Task2被Task3抢占后会从运行态变为就绪态。 3.Task3运行过程中Task3阻塞了(系统延时(delay)或等待信号量等)此时就绪态中优先级最高的任务Task2执行。 4.Task3阻塞解除了延迟到了或者是接收到信号量此时Task3恢复到就绪态中抢占Task2的运行。 总结 1.高优先级任务优先执行。 2.高优先级任务不停止低优先级任务无法执行。 3.被抢占的任务会进入就绪态。 2.2时间片调度 同等优先级任务轮流享有相同CPU时间可设置叫时间片在FreeRTOS中一个时间片的大小由SysTick(滴答定时器)中断周期来决定。 在FreeRTOS中创建了三个任务分别是Task1、Task2、Task3它们的优先级相同均为1。 运行过程如下 1.当Task1运行完一个时间片后切换至Task2运行。 2.当Task2运行完一个时间片后切换至Task3运行。 3.Task3运行过程中(还不到一个时间片),Task3阻塞了(系统延时或等待信号量等)此时直接切换到下一个任务Task1运行。 4.当Task1运行完一个时间片后切换至Task2运行。 总结 1.同等优先级任务轮流执行时间片流转。 2.一个时间片大小取决于滴答定时器中断周期。 3.没有用完的时间片不会再使用下次任务Task3得到执行后还是按照一个时间片的时钟节拍运行。 3.任务状态 FreeRTOS中任务共存在4种状态分别为 1.运行态正在执行的任务该任务就处于运行态在STM32中同一个时间只有一个任务处于运行态。 2.就绪态如果该任务已经能被执行但当前还未被执行那么该任务处于就绪态只有就绪态才会变成运行态。 3.阻塞态如果一个任务因延时或等待外部事件发生那么这个任务就处于阻塞态。当延时结束或等待外部事件结束才能变为就绪态。 4.挂起态类似于暂停调用函数vTaskSuspend()进入挂起态需要调用解挂函数vTaskResume()才可以进入就绪态。 四种任务状态之间的转换图 总结 1.仅就绪态可转变成运行态。 2.其他状态的任务想运行必须先转变成就绪态。 3.1任务状态列表 FreeRTOS无非就四种状态运行态就绪态阻塞态挂起态这四种状态除了运行态其他三种任务状态都有其对应的任务状态列表(这里的列表就是链表数据结构的链表)。 就绪列表pxReadyTasksLists[x]x代表任务优先级数值软件/通用优先级上数值无限大硬件上STM32是32位的所以x的值为32。 阻塞列表pxDelayedTasksLists。 挂起列表pxSuspendedTasksLists。 如果任务处于就绪态FreeRTOS会将该任务挂到就绪列表(链表)如下图所示 如果任务处于就阻塞态FreeRTOS会将该任务挂到阻塞列表任务处于挂起态FreeRTOS会将该任务挂到挂起列表。 正在执行的任务状态为运行态当处于运行态的任务执行结束(时间片到了/延时或等待外部事件发生)需要切换下一个任务执行FreeRTOS就会在就绪列表中挑选优先级高的任务来执行处于阻塞列表和挂起列表里的任务需要解除阻塞状态和解除挂起状态后成为就绪态并且挂载到就绪列表才会被执行。 就绪列表pxReadyTasksLists[x]x代表任务优先级数值如果用硬件上的优先级就绪列表初始化后就有32个就绪列表(就绪链表)如下图所示 如果创建3个任务Task1、Task2、Task3它们优先级分别为31301。新创建的任务处于就绪态FreeRTOS会将这3个任务按照优先级挂载到对应的就绪列表如下图所示 当处于运行态的任务执行完毕FreeRTOS就会在就绪列表中选择优先级最高的Task1任务进行运行Task1就会从就绪态转变为运行态。 如果Task1、Task2、Task3这三个任务的优先级相同均为1那么这三个任务会被连接到同一个就绪列表上如下图所示 FreeRTOS是怎么知道32个就绪列表中是否挂载有任务呢用一个32位的变量当就绪列表中挂载有任务时变量对应的优先级位的bit位置一如下图所示 当32位的变量的某个位为1时代表所对应的优先级列表有任务存在。任务调度器总是在所有处于就绪列表任务中选择具有最高优先级的任务来执行。