裸机与RTOS到FreeRTOS基础 | FreeRTOS一

目录

一、裸机与RTOS

1.1、裸机

1.2、RTOS

二、FreeRTOS简介

2.1、介绍

2.2、特点

2.3、如何查找相关资料

三、FreeROTS基础

3.1、任务调度

3.2、任务状态


一、裸机与RTOS

1.1、裸机

        不带操作系统,又称为前后台系统,前台系统指中断服务函数,后台系统指主程序的大循环,即应用程序

特点:

1)实时性差(程序轮流执行)

2)空等待(在delay时,cpu不执行其他代码)

3)结构性差(实现功能全放在主函数循环中)

1.2、RTOS

        Real-time OS,也就是实时操作系统。

特点:

1)多任务,每个功能可以划分为一个任务

2)任务调度,高优先级任务延时时,会让出cpu试用期给低优先级使用

3)任务抢占,高优先级任务可以抢占低优先级任务

4)任务堆栈,每个任务都有自己的栈空间,用来保存相关数据

注意点:

1)中断可以打断任何等级的任务

2)可以存在优先级相同的不同任务

二、FreeRTOS简介

2.1、介绍

Free,免费的,RTOS实时操作系统,FreeRTOS就是一个免费的嵌入式实时操作系统。

2.2、特点

1)免费开源(降低了开发成本)

2)可裁剪(核心代码只有三个.c文件,9000行)

3)简单(可移植性好)

4)优先级不限(任务优先级分配没有限制,多任务可以同一优先级,硬件限制0-31)

5)任务不限(可创建的实时任务没有软件限制)

6)支持抢占/协程/时间片(任务调度)

2.3、如何查找相关资料

1)官网:https://www.freertos.org/

2)网络上其它分享平台如:正点原子学习资料、野火学习资料

ARM Cortex-M知识参考:<Cortex M3权威指南(中文)><Cortex M3、M4权威指南>

三、FreeROTS基础

3.1、任务调度

FreeROTS支持三种任务调度方式,如下:

1)抢占式调度:针对优先级不同的任务,每个任务都有一个优先级,优先级高的任务可以抢占优先级低的任务;

2)时间片调度:一个时间片就等于SysTick中断周期(默认1ms),可设置,针对优先级相同的任务,当多个任务的优先级相同时,任务调度器会跟根据系统时钟节拍到的时候切换任务;

3)携程式调度:当前执行任务将会一直运行,同时高优先级的任务不会抢占的优先级的任务,FreeROTS现在虽然还支持,但是官方已经表示不会在更新携程式调度。

3.2、任务状态

FreeROTS中任务存在4中状态,如下:

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

2)就绪态:该任务已经能够执行,但目前还未被执行,那么该任务就处于就绪态;

3)阻塞态:任务因延时或等待外部事件发生,那么这个任务就处于阻塞态;

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

注意:

1)任务中途被打断或阻塞,没有用完的时间片不会被二次使用,在下次轮到该任务执行时,分配的是一个新的时间片;

2)仅就绪态可转变成运行态;

3)其它状态的任务想运行,必须先转变成就绪态。

四种状态转换图,如下图1:

图1

这四种状态中,除了运行态,其他三种任务状态的任务都有其对应的任务状态列表,如下:

就绪列表:pxReadyTasksLists[x],其中x代表任务优先级数值-->常用硬件较为稳定0-31,数字大优先级高

阻塞列表:pxDelayedTaskList

挂起类别:xSuspendedTaskList

那么如何知道列表中有没有任务呢?

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

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


 

猜你喜欢

转载自blog.csdn.net/qq_57663276/article/details/128726509