FreeRtos简介

认识freertos

RTOS全称是Real Time Operating System,中文名就是实时操作系统。可以看出FreeROTS 就是一个免费的RTOS类系统。这里要注意,RTOS不是指某一个确定的系统,而是指一类系统。比如UCOS,FreeRTOS,RTX,RT-Thread等这些都是RTOS类操作系统。
操作系统允许多个任务同时运行,这个叫做多任务,实际上,一个处理器核心在某一时刻只能运行一个任务。操作系统中任务调度器的责任就是决定在某一时刻究竟运行哪个任务,任务调度在各个任务之间的切换非常快!这就给人们造成了同一时刻有多个任务同时运行的错觉。
操作系统的分类方式可以由任务调度器的工作方式决定,比如有的操作系统给每个任务分配同样的运行时间,时间到了就轮到下一个任务,Unix操作系统就是这样的。RTOS的任务调度器被设计为可预测的,而这正是嵌入式实时操作系统所需要的,实时环境中要求操作系统必须对某一个事件做出实时的响应,因此系统任务调度器的行为必须是可预测的。像FreeRTOS 这种传统的 RTOS 类操作系统是由用户给每个任务分配一个任务优先级,任务调度器就可以根据此优先级来决定下一刻应该运行哪个任务。
FreeRTOS 是RTOS系统的一种,FreeRTOS十分的小巧,可以在资源有限的微控制器中运行,当然了,FreeRTOS不仅局限于在微控制器中使用。但从文件数量上来看FreeRTOS 要比 UCOSII和UCOSIII小的多。

RTOS强调的是:实时性。实时操作系统又分为软实时和硬实时。硬实时要求在规定的时间内必须完成操作,硬实时不允许超时,软实时里面处理过程超时的后果就没有那么严格。          

在实时操作系统中,我们可以把要实现的功能划分为多个任务,每个任务负责实现其中的一部分,每个任务都是一个很简单的程序,通常是一个死循环。    

RTOS操作系统: Freertos, UCOS,RTX,RT-THread,DJYOS等    

RTOS操作系统的核心内容在于: 实时内核。

前后台系统

前后台系统将软件系统分为前台和后台两部分。前台通常指的是与用户交互或处理实时性要求较高的部分,例如图形界面、按键输入响应等。后台则主要负责处理一些非实时性的任务,如数据处理、定时任务、系统管理等。这样的程序包括一个死循环和若干个中断服务程序:应用程序是一个无限循环,循环中调用API库函数完成作需的操作,大循环叫做后台系统。中断服务程序用于处理系统的异步事件,也就是前台系统。前台是中断级,后台是任务级。

前后台系统虽然简单和消耗资源少,但是实时性差,前后台系统各个任务都是排队等待轮流执行,不管多紧急的程序,没有轮到执行就只能排队等候,相当于每个任务的优先级都是一样的,所以在这个时候就需要多系统出马了。

通过CPU的分时复用技术,将CPU时间划分成多个时间片,每个任务轮流获得CPU时间片来执行。由于CPU切换速度极快,用户感觉多个任务在同时运行。RTOS的内核负责管理所有的任务,内核决定了运行哪个任务,何时停止当前任务切换到其他任务,这个是内核的多任务管理能力。多任务管理给人的感觉就是芯片有多个CPU,多任务管理实现了CPU资源的最大化利用,多任务管理有助于实现程序的模块化开发,能够实现复杂的实时利用。 可剥夺型内核顾名思义就是可以剥夺其他任务的CPU使用权,他总是运行就绪任务中优先级最高的任务。

任务Task

任务特性:

1、简单。
2、没有使用限制。
3、支持抢占
4、支持优先级
5、每个任务都拥有堆栈导致了RAM使用量增大。
6、如果使用抢占的话的必须仔细的考虑重入的问题。

在使用 RTOS 的时候一个实时应用可以作为一个独立的任务。每个任务都有自己的运行环境,不依赖于系统中其他的任务或者RTOS调度器。任何一个时间点只能有一个任务运行,具体运行哪个任务是由RTOS调度器来决定的,RTOS调度器因此就会重复的开启、关闭每个任务。任务不需要了解RTOS调度器的具体行为,RTOS调度器的职责是确保当一个任务开始执行的时候其上下文环境(寄存器值,堆栈内容等)和任务上一次退出的时候相同。为了做到这一点,每个任务都必须有个堆栈,当任务切换的时候将上下文环境保存在堆栈中,这样当任务再次执行的时候就可以从堆栈中取出上下文环境,任务恢复运行。

任务状态:

FreeRTOS 中的任务永远处于下面几个状态中的某一个:
·运行态
当一个任务正在运行时,那么就说这个任务处于运行态,处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器的话那么不管在任何时刻永远都只有一个任务处于运行态。
·就绪态
处于就绪态的任务是那些已经准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!
·阻塞态
如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态,比如说如果某个任务调用了函数vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量、事件组、通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超时时间任务就会退出阻塞态,即使所等待的事件还没有来临!
·挂起态
像阻塞态一样,任务进入挂起态以后也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用函数vTaskSuspend()和xTaskResume()。

任务优先级

优先级设置范围

FreeRTOS中任务优先级是一个相对数值,范围通常是0到(configMAX_PRIORITIES - 1),数值越大表示优先级越高。configMAX_PRIORITIES是在FreeRTOS的配置文件中定义的,默认值通常是32,用户可根据实际需求修改。

抢占式调度与优先级

在抢占式调度机制下,当一个高优先级任务进入就绪态时,它会立即抢占当前正在运行的低优先级任务的CPU资源,使低优先级任务进入就绪态或阻塞态,高优先级任务开始运行。例如,一个优先级为5的任务正在运行,此时一个优先级为7的任务就绪,那么CPU会立即切换到优先级为7的任务执行。

相同优先级任务处理

对于具有相同优先级的任务,FreeRTOS采用时间片轮转调度算法。即每个任务运行一个时间片后,会将CPU资源让给同优先级的其他任务,使它们有机会执行。这样可以保证相同优先级的任务能够公平地共享CPU资源。

任务控制块

功能

• 任务控制块用于存储任务的相关信息,是FreeRTOS内核管理任务的关键数据结构。内核通过任务控制块来跟踪和控制每个任务的执行状态、优先级、上下文等信息,实现任务的调度、切换和管理。

包含内容

• 任务句柄:是任务的唯一标识符,用于在程序中引用任务。

• 任务状态:记录任务当前所处的状态,如运行态、就绪态、阻塞态或挂起态。

• 任务优先级:表示任务的优先级别,决定任务在竞争CPU资源时的执行顺序。

• 堆栈指针:指向任务的堆栈,用于保存任务的局部变量、函数调用参数和返回地址等。

• 任务函数指针:指向任务的入口函数,即任务开始执行的起始地址。

• 其他信息:还可能包含与任务相关的其他信息,如任务名称、任务的等待事件列表、任务的Tick计数等。

作用

• 任务调度:调度器根据任务控制块中的优先级和状态信息,决定当前应该执行哪个任务,实现任务之间的切换和调度。

• 资源管理:通过任务控制块,内核可以管理任务使用的资源,如堆栈空间,确保每个任务都有独立的资源,避免资源冲突。

• 任务控制:提供了对任务进行控制和操作的接口,例如挂起、恢复、删除任务等操作,都是通过对任务控制块的相应字段进行修改来实现的。

任务堆栈

作用

• 保存任务上下文:当任务被切换出运行状态时,其当前的CPU寄存器值等上下文信息会被保存到任务堆栈中,以便任务再次运行时能恢复到原来的状态。

• 存储局部变量和函数调用信息:任务函数中定义的局部变量、函数调用时的参数和返回地址等都存储在任务堆栈中。

堆栈空间分配

• 每个任务都有独立的堆栈空间,其大小在创建任务时通过参数指定。例如,使用xTaskCreate()函数创建任务时,可以指定usStackDepth参数来设置堆栈的深度,单位是字(Word,通常为4字节)所以任务实际堆栈大小是我们定义的4倍

堆栈增长方向

• FreeRTOS支持两种堆栈增长方向,由configSTACK_GROWTH宏定义指定。如果configSTACK_GROWTH为1,堆栈向内存地址减小的方向增长;如果为-1,则向内存地址增大的方向增长。

堆栈溢出检测

• FreeRTOS提供了堆栈溢出检测功能。当启用configCHECK_FOR_STACK_OVERFLOW宏定义时,内核会在任务切换等时机检查任务堆栈是否溢出。如果检测到堆栈溢出,会调用configSTACK_OVERFLOW_HOOK函数,用户可在该函数中进行错误处理,如记录错误信息、停止系统运行等。

与任务性能的关系

• 堆栈空间大小设置会影响任务性能。如果堆栈空间过小,可能导致堆栈溢出,使任务运行出错;如果过大,会浪费内存资源。因此,需要根据任务实际使用的局部变量、函数调用嵌套深度等因素合理设置堆栈大小,以平衡内存使用和任务稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值