FreeRTOS

FreeRTOS任务调度的三种方式:

抢占式调度

针对优先级不同的任务

时间片调度
  • 针对优先级相同的任务;

  • FreeRTOS中的一个时间片就等于SysTick(滴答定时器)中断周期(1ms);

协程式调度

后续将不再支持。

!NOTE

  1. 同等优先级任务,轮流执行;时间片流转;
  2. 一个时间片大小,取决于滴答定时器中断周期;
  3. 没有用完的时间片将不会再使用,会直接进入下个任务;下次执行该任务时还是按照一个时间片的时钟节拍运行;
四种任务状态
  1. 运行态:只能从就绪态进入该状态;
  2. 就绪态
  3. 阻塞态
  4. 挂起态:类似暂停,调用函数vTaskSuspend()进入挂起状态,需要调用解挂函数vTaskResume()才可以进入就绪状态;

!NOTE

  1. 仅就绪态可转变为运行态;
  2. 其他状态的任务想运行,就必须先转变为就绪态;
  3. FreeRTOS的四中状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表(链表);
任务状态列表
  1. 就绪列表:pxReadyTaskLists[x],其中x代表任务优先级数值;只有任务先挂载到就绪列表,任务才能进入到运行态;
  2. 阻塞列表:pxDelayedTaskList
  3. 挂起列表:xSuspendTaskList

FreeRTOS 移植

源码获取
  • 官网
  • 第三方开发板厂商
源码
  • include:FreeRTOS的头文件
  • portable:FreeRTOS的移植文件
  • croutine.c:协程相关文件按
  • event_groups.c:事件相关文件
  • list.c:列表相关文件
  • queue.c:队列相关文件
  • stream_buffer.c:流式缓冲区相关文件
  • task.c:任务相关文件
  • timers.c:软件定时器相关文件
portable文件夹

FreeRTOS操作系统归根到底是一个软件层面的东西,那FreeRTOS是如何跟硬件联系在一起的呢?portable文件里面的东西就是连接桥梁。

由于使用MDK开发(stm32),因此这里重点介绍其中的部分移植文件:

  • Keil:指向RVDS文件夹
  • RVDS:不同内核芯片的移植文件
  • MemMang:内存管理文件
移植
  • 移植准备:FreeRTOS源码

  • 基础工程:

  • 移植步骤:

  1. 添加FreeRTOS源码:将FreeRTOS源码添加至基础工程、头文件路径等;
  2. FreeRTOSConfig.h:添加FreeRTOSConfig.h配置文件;
  3. 修改SYSTEM文件:修改SYSTEM文件中的sys.cdelay.cusart.c
  4. 修改中断相关文件:修改Systick中断、SVC中断、PendSV中断;
  5. 添加应用程序:验证移植是否成功;
相关推荐
暮雪倾风3 个月前
【硬件介绍】Type-C接口详解
接口·eda·电路·type-c
我要学脑机6 个月前
电路知识的回顾
c·电路
腾飞的信仰7 个月前
防反接电路设计
电路
视觉&物联智能1 年前
【电路笔记】-电阻率
笔记·嵌入式硬件·物联网·嵌入式·电路·模拟电路·电路原理
甘晴void1 年前
湖南大学-电路与电子学-2021期末A卷★(不含解析)
fpga开发·电路·hnu·湖南大学
视觉&物联智能1 年前
【电路笔记】-并联电阻
笔记·嵌入式硬件·物联网·电路·模拟电路·电子工程·电路原理
视觉&物联智能1 年前
【电路笔记】-电阻串联
笔记·嵌入式硬件·物联网·电路·模拟电路·电子工程·电路原理
视觉&物联智能1 年前
【电路笔记】-电源电压
笔记·单片机·嵌入式硬件·电路·模拟电路·电子工程·直流电路
视觉&物联智能1 年前
【电路笔记】-星三角变换(Star-Delta Transformation)
笔记·嵌入式硬件·物联网·电路·交流电路·直流电路·电路原理