【FreeRTOS】——裸机/RTOS开发&FreeRTOS&任务调度/任务状态&源码与移植

目录

前言:

一、裸机与RTOS

1、裸机

2、RTOS

二、FreeRTOS

1、任务调度

2、任务状态(4种)

三、FreeRTOS源码说明&移植

总结:


前言:

FreeRTOS 是市场领先的面向微控制器和小型微处理器的实时操作系统 (RTOS),与世界领先的芯片公司合作开发,现在每 170 秒下载一次。FreeRTOS 通过 MIT 开源许可免费分发,包括一个内核一组不断丰富的 IoT 库,适用于所有行业领域。FreeRTOS 的构建强调可靠性和易用性

声明:博客笔记根据正点原子视频教程编辑,仅供学习交流!


一、裸机与RTOS

1、裸机

简介:裸机又称为前后台系统,前台系统指的中断服务函数,后台系统指的大循环,即应用程序

例子:打游戏和回复信息,需要打完游戏才可回复信息,或者回复完信息才可打游戏。

特点:①实时性差:应用程序轮流执行。②delay:空等待,CPU不执行其他代码(浪费了资源)。③结构臃肿:实现的功能都放在无限循环

    

2、RTOS

简介:RTOS全称为:Real Time OS,就是 实时操作系统 ,强调的是: 实时性
例子: 打游戏和回复信息,不需要等某一件事做完,可每间隔1ms(一个时间片时钟节拍),然后交替做这两件 ,因为速度很快,从宏观的意义上来看,类似同步执行
特点:①分而治之:实现功能 划分多个任务。②延时函数: 不会空等待,会让CPU的 使用权给其他任务,即任务调度。③抢占式: 高优先级任务抢占低优先级任务。④任务堆栈:每个任务都有自己的 栈空间,用于 保存局部变量以及任务的上下文信息。
注意: ①中断可以打断任何任务。②任务可以同等优先级
问题: 如果高优先级的任务一直在运行, 会使得低优先级任务无法运行。


二、FreeRTOS

简介:FreeRTOS 是一个嵌入式实时操作系统

特点:①免费开源:商业产品中使用,无潜在商业风险,无须担心。②可裁剪:使得FreeRTOS的核心代码只有9000行左右。③简单:简单易用,可移植性好。④优先级不限:任务优先级分配没有限制多任务可同一优先级。⑤任务不限:可创建的实时任务数量没有软件限制。⑥支持抢占式,协程式、时间片流转任务调度

1、任务调度

调度器就是使用相关的调度算法来决定当前需要执行的任务。FreeRTOS支持 抢占式、时间片、携程式 三种调度方式。
①抢占式调度:针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务。

 首先Task1在运行中,在这个过程中Task2就绪了,在抢占式调度器的作用下Task2会抢占Task1的运行;Task2运行过程中,Task3就绪了,在抢占式调度器的作用下Task3会抢占Task2的运行;Task3运行过程中,如果Task3阻塞了(即系统延时或等待信号量等),此时就绪态中优先级最高的任务Task2执行;如果Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占TasK2的运行。

总结:高优先级任务,优先执行。②高优先级任务不停止,低优先级任务无法执行。③被抢占的任务将会进入就绪态

②时间片调度:针对优先级相同的任务,当多个任务的优先级相同时, 任务调度器会在每一次系统 时钟节拍 到的时候切换任务。同等优先级任务轮流地享有相同的 CPU 时间( 可设置 ), 叫时间片,在FreeRTOS中, 一个时间片就等于SysTick 中断周期

首先Task1运行完一个时间片后,切换至Task2运行;Task2运行完一个时间片后,切换至Task3运行;Task3运行过程中还不到一个时间片阻塞了(系统延时或等待信号量等),此时直接切换到下一个任务Task1;Task1运行完一个时间片后,切换至Task2运行。

总结:同等优先级任务,轮流执行;时间片流转。②一个时间片大小,取决为滴答定时器中断周期。③注意没有用完的时间片不会再使用,下次任务Task3得到执行还是按照一个时间片的时钟节拍运行(下次重新开始一个时间片计时)。

③协程式调度:了解即可, 当前执行任务将会一直运行,同时高优先级的任务不会抢占低优先级
任务。官方已不会再更新此种方式的任务调度。

2、任务状态(4种)

运行态:正在执行的任务,该任务就处于运行态,注意在STM32中,同一时间仅一个任务处于运行态

就绪态:如果该任务已经能够被执行,但当前还未被执行,那么该任务处于就绪态。

阻塞态:如果一个任务因延时或等待外部事件发生,那么这个任务就处于阻塞态。

挂起态:类似暂停,调用函数 vTaskSuspend() 进入挂起态,需要调用解挂函数vTaskResume() 才可以进入就绪态

总结:仅就绪态可转变为运行态;其他状态的任务想运行,必须先转变成就绪态

任务状态列表:

这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表(类似链表)

     

新创建的任务会在就绪列表。32位的变量,当某个位置1时,代表所对应的优先级就绪列表有任务存在。

举例:假设,创建三个任务分别是:task1、task2、task3,优先级分别是:1、2、3。调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行。若出现相同优先级任务,任务会连接在同一个就绪列表上。

     

 有关任务状态列表的知识后续会有专门的博客总结!


三、FreeRTOS源码说明&移植

源码

源码下载链接:https://www.freertos.org/

 这三个文件依次是内核、组件和工具,其中第一个FreeRTOS内核包括Demo(FreeRTOS演示例程)、License(FreeRTOS相关许可)、Source(源码)、Test(公用以及移植层测试代码)。

  

源码Source里需要注意include(头文件)、portable(移植文件)、list.c(列表相关文件)、queue.c(队列相关文件)、task.c(任务相关文件)、timers.c(软件定时器相关文件)。

 FreeRTOS操作系统归根到底是一个软件层面的东西,靠portable(移植文件)与硬件联系起来,我们使用MDK开发,因此这里只重点介绍其中的部分移植文件:

                 

 移植(基于HAL库开发,基于库函数的稍有不同)

①添加FreeRTOS源码:将FreeRTOS源码添加至基础工程、头文件路径等

②FreeRTOSConfig.h:添加FreeRTOSConfig.h 配置文件。

③修改SYSTEM文件:修改SYSTEM文件中的sys.c、delay.c、usart.c。
④修改中断相关文件:修改Systick中断、SVC中断、PendSV中断。
⑤添加应用程序:验证移植是否成功。
FreeRTOSConfig.h 配置文件作用:对FreeRTOS的功能进行 配置和裁剪,以及 API函数的使能等 
相关宏大致可分为三类: “INCLUDE”用于配置FreeRTOS中可选的API函数;“config”完成FreeRTOS的功能配置和裁剪;其他配置项PendSV宏定义、SVC宏定义等。

总结:

对于配置和移植总结不全,随后会补充!

往期精彩:

电机应用控制——直流无刷电机

OpenCV机器视觉系列专栏

C语言进阶

  • 17
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柯宝最帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值