FreeRTOS学习笔记-基于STM32(1)基础知识

一、裸机与RTOS

我们使用的32板子是裸机,又称前后台系统。裸机有如下缺点:

1、实时性差。只能一步一步执行任务,比如在一个while循环中,要想执行上一个任务,就必须把下面的任务执行完,循环一遍后才能执行这个任务;

2、浪费资源。在程序delay延时的时候会进入空等待,此时CPU不执行其他代码;

3、结构臃肿。实现的功能都放在无限循环中。

RTOS(Real Time OS)实时操作系统就可以解决这些问题。RTOS有以下特点:

1、分而治之。实现的功能可以划分为多个任务;

2、任务调度。在延时函数时,不会进入空等待,而是让CPU执行其他任务;

3、抢占式。高优先级的任务可以抢占低优先级的任务;

4、任务堆栈。每个任务都有自己的栈空间,用于保存局部变量以及任务的上下文信息。

注意:中断可以打断任意任务;任务可以同等优先级。

二、任务调度

1、任务调度器

使用相关的调度算法来决定当前需要执行的任务

2、调度方式

①抢占式调度:

主要针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务先执行,高优先级的任务可以抢占低优先级的任务;

        注意:

        高优先级的任务优先执行;

        高优先级的任务不停止,低优先级的任务无法执行;

        被抢占的任务将进入就绪态

②时间片调度:

主要针对优先级相同的任务,优先级任务相同的时候,任务调度器在每一个系统时钟节拍到的时候切换任务,即每一个任务执行一个滴答定时器中断周期的时间,然后执行别的任务;

        注意:

        同等优先级任务会轮流执行,时间片流转;

        一个时间片大小取决于滴答定时器中断频率

        如果任务被中途打断或阻塞,没有用完的时间片不会再次使用,而是直接跳过

③协程式调度(了解即可):

一个任务执行完后才能执行另一个任务,且不能被抢占。

三、任务状态

1、FreeRTOS的任务状态

①运行态:即正在执行的任务,STM32中,同一时间只有一个任务处于运行态

②就绪态:任务已经能够被执行但还未执行;

③阻塞态:任务因延时或等待外部事件发生;

④挂起态:类似暂停,调用vTaskSuspend()进入挂起态,调用vTaskResume()解挂函数解除挂起态。

        注意:

        ①:挂起态解除后会进入就绪态;

        ②:仅就绪态才可以转变为运行态;

        ③:其他状态想要运行,必须先转变为就绪态。

2、状态之间的转换

FreeRTOS学习笔记-基于STM32(1)基础知识_第1张图片

四、状态列表

这四种状态中,除了运行态,其他三种任务状态都有对应的任务状态列表:就绪列表(pxReadyTasksList[x]);阻塞列表(pxDelayedTaskList[x]);挂起列表(xSuspendedTaskList[x])其中x代表任务优先级数值,为0~31。

而任务调度器总是在所有处于就绪列表的任务中,选择优先级最高的任务来执行,如果优先级相同,就使用时间片调度,“同时”执行同一优先级的任务

你可能感兴趣的:(FreeRTOS,学习,笔记,stm32)