RTOS学习笔记(一):FreeRTOS简介

1.裸机与RTOS介绍

裸机:简单来讲,裸机的首要特点就是没有操作系统。裸机又称为前后台系统,所谓的前台系统指的是中断服务函数,而后台系统则指的是大循环,也就是应用程序。

RTOS: Real Time Operation System,  实时操作系统。RTOS中的任务可以分为低优先级任务和高优先级任务,低优先级任务在运行过程中可以被高优先级任务打断,而高优先级任务自然可以被更高优先级的任务打断,即使是最高优先级的任务也会被中断服务程序打断。

相比于裸机,RTOS的优势在于什么呢?

裸机在执行完当前任务后才能够执行下一个任务,RTOS虽然在同一时刻也只能做一项任务,。也就是说,裸机的实时性差,应用程序只能轮流执行,当裸机使用延时函数时,CPU无法执行其它代码,由于裸机实现功能都放在while代码中,所以其结构也比较臃肿。从RTOS的名字也可以看出,RTOS强调的是实时性,每个任务都是一个无限循环。RTOS的延时函数可以用于任务调度,充分利用了CPU的资源,且每个任务都有一个单独的栈空间,这就确保了每次执行完高优先级的任务,都会从之前的打断点开始,继续执行任务。要注意的是,中断能够打断任意任务。

2. FreeRTOS

2.1 FreeRTOS简介

从字面很容易理解,FreeRTOS是一个免费的嵌入式实时操作系统。除了免费之外,稳定性和安全性也是FreeRTOS的亮点之一。此外,FreeRTOS可以裁剪,其核心代码只有9000行,被3个.c文件所包含。在优先级方面,任务的优先级分配没有什么限制,并且多任务可以在同一个优先级,其实时任务数量在软件方面也没有限制。支持抢占式、协程式、时间片流转任务调度。

FreeRTOS官网

2.2 FreeRTOS基础知识

2.2.1任务调度

调度器就是使用相关的调度算法来决定当前需要执行的哪个任务。

FreeRTOS共支持三种调度任务:

- 抢占式调度:主要是针对优先级不同的任务,根据任务优先级的不同,调度任务。

- 时间片调度:主要是针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会在每一个系统时钟节拍到的时候切换任务。
- 协程式调度:当前执行任务将会一直执行,同时高优先级的任务不会抢占低优先级任务,但是FreeRTOS官方表示不会再继续更新协程式调度。

抢占式调度

图中的运行过程为:

  1. Task1在运行中,当Task2就绪时,在抢占式调度器的作用下Task2会抢占Task1的运行
  2. Task2在运行中,当Task3就绪时,在抢占式调度器的作用下Task3会抢占Task2的运行
  3. Task3在运行中,当Task3阻塞(系统延时或等待信号量等)时,此时就绪态中,优先级最高的任务Task2执行。
  4. Task3阻塞解除了(延时到了或者接收到信号量),此时Task3恢复到就绪态中,抢占Task2的运行

抢占式调度的特点可以总结为以下三项:

  • 高优先级任务,优先执行
  • 高优先级任务不停止,低优先级任务无法执行
  • 被抢占的任务将会进入就绪态
时间片调度

同等优先级任务轮流地享有相同的 CPU 时间(可设置), 叫时间片,在FreeRTOS中,一个时间片就等于SysTick 中断周期

图中的运行过程如下:

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

抢占式调度的特点可以总结为以下三项:

  • 同等优先级任务,轮流执行,时间片流转
  • 一个时间片大小取决为滴答定时器中断周期
  • 注意没有用完的时间片不会再使用,下一次的任务还是会按照整个时间片的时钟节拍运行

2.1.2任务状态

FreeRTOS任务共存在4种任务状态:

  1. 运行态:正在执行的任务就处于运行态,在STM32中,同一时间仅有一个任务处于运行态
  2. 就绪态:如果该任务已经能够被执行,但当前还未被执行,则称该任务目前处于就绪态。
  3. 阻塞态如果一个任务因延时或等待外部事件发生,那么这个任务就处于就绪态。
  4. 挂起态:类似于暂停,可以通过调用函数`vTaskSuspend()`进入挂起态,当需要解挂时,可以通过调用函数`vTaskResume()`解挂。

四种状态之间的转换如下图所示:

只有就绪态可以转变为运行态,当其他状态的任务想要运行时,必须先转换为就绪态。

任务状态列表

在FreeRTOS的四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表。

  • 就绪列表:pxReadyTaskLists[x],其中x代表优先级数值。相同优先级的任务会连接在同一个就绪列表上。
  • 阻塞列表:pxDelayedTaskList
  • 挂起列表:xSuspendedTaskList

调度器总是在所有处于就绪列表的任务中,选择具有最高优先级的任务来执行。

  • 35
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TI RTOS学习笔记是作者在学习TI-RTOS过程中记录的学习笔记。根据引用[1],在学习TI-RTOS之前,先要了解什么是RTOS,以及什么是TI-RTOSRTOS是实时操作系统(Real-Time Operating System)的缩写,它是一种专门用于处理实时任务的操作系统。TI-RTOS是Texas Instruments(TI)公司提供的一种RTOS,适用于TI系列的处理器和微控制器。 根据引用,作者在网上没有找到TI-RTOS学习视频,但TI公司提供了许多相关的文档资料,因此作者选择通过阅读文档并记录笔记学习TI-RTOS。 另外,引用中提到了TI RTOS SDK编译框架的介绍。TI RTOS SDK是TI公司提供的用于开发TI-RTOS应用程序的软件开发工具包。编译框架是指用于将源代码转换为可执行文件的编译和构建过程。通过学习和了解TI RTOS SDK的编译框架,可以更好地理解和使用TI-RTOS。 所以,TI RTOS学习笔记是作者记录的关于学习TI-RTOS笔记,包括对RTOS的理解、TI-RTOS的介绍以及TI RTOS SDK的编译框架的学习和总结。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [TI-RTOS学习记录(一)——初识TI-RTOS](https://blog.csdn.net/qq_43105170/article/details/126447116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [TI RTOS SDK编译框架介绍](https://download.csdn.net/download/embededman/86951678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值