FreeRTOS学习之路(一)基础知识

FreeRTOS是什么?

实时操作系统(Real TIme Operation System)RTOS有uC/OS, RT-Thread, FreeRTOS等等。RTOS的核心是任务管理,FreeRTOS也不例外。我们学习FreeRTOS主要是用其多任务处理功能。多任务是由很多个小任务组成,这些小任务是并发处理的。但是stm32单片机的cortex-M3芯片只有一个CPU,每次只能执行一个任务,所以并发不等于同一时刻一起执行很多个任务,而是由于每个任务之间互相切换执行的速度非常快,看起来像是同一时刻执行很多任务。

任务调度器/任务管理器(Schedule)

多个任务是一个执行之后切换到另一个任务执行,切换时间非常短,那么如何让哪个任务先执行,哪个任务后运行呢?确定任务的执行顺序就需要用到任务调度器了。FreeRTOS是一个抢占式的实时多任务系统,其任务调度器也是抢占式的。
在这里插入图片描述
高优先级的任务可以打断低优先级任务的运行而取得CPU的使用权,从而保证了那些紧急任务的运行。实时性要求高的任务可以设置一个很高的优先级。高优先级的任务执行完成之后重新把CPU的使用权归还给低优先级的任务,处于同一优先级的任务会使用时间片轮转调度器获取运行时间,这就是抢占式实时系统的基本原理。

任务状态

任务永远处于运行态、就绪态、阻塞态、挂起态中的一种。

运行态

处于运行态的任务就是当前正在使用处理器的任务。如果使用的是单核处理器,那么不管在任何时刻永远都只有一个任务处于运行态。

就绪态

处于就绪态的任务没有被阻塞或过去,是可以运行的任务,但是还没有运行,原因是有一个同优先级或者更高优先级的任务正在执行。

阻塞态

如果一个任务当前正在等待某个外部事件,比如调用了vTaskDealy(), 则进入阻塞态,直至延时周期完成。任务进入阻塞态会有一个超时时间,超过这个超时时间则任务退出阻塞态,即使所等待的事件还没有来临。

挂起态

任务挂起之后就不能被任务调度器调用进入运行态。

任务切换

RTOS系统的核心是任务管理,而任务管理的核心是任务切换,任务切换决定了任务的执行顺序,任务切换效率的高低也决定了一款系统的性能。

PendSV异常

PendSV(可挂起的系统调用)异常对OS来说非常重要,FreeRTOS会利用PendSV异常来处理任务切换(上下文切换)。FreeRTOS有些API函数也会调用taskYIELD(),这些API函数会导致任务切换,这些API函数和任务切换函数taskYIELD()都统称为系统调用。

时间片调度

FreeRTOS支持多个任务同时拥有一个优先级,这些相同优先级任务的切换用到时间片。FreeRTOS中允许一个任务运行一个时间片(一个时钟节拍的长度)后让出CPU的使用权,让拥有相同优先级的下一个任务运行,这就是时间片调度。
调用portYIELD()可以强行进行任务切换,放弃剩余的时间片,使得具有相同优先级的下一个就绪的任务运行。
要使用时间片调度,宏configUSE_PREEMPTION和宏configUSE_TIME_SLICING必须为1.时间片的长度由宏configTICK_RATE_HZ来确定,一个时间片的长度就是滴答定时器(SysTick)的中断周期,时间片调度发生在滴答定时器的中断服务函数中。在中断服务函数SysTick_Handler()中会调用FreeRTOS的API函数xPortSysTickHandler(),而该函数会引发任务调度。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值