FreeRTOS笔记

任务的创建和删除(静态方法)

任务创建后要开启调度器。

FreeRTOSConfig.h 

1. 改宏 使能静态创建函数。

  会出现,有两个函数未定义。

任务的特性

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

任务状态:

FreeRTOS中的任务永远处于下面几个状态中的某一个:

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

就绪态:处于就绪态的任务就是那些准备就绪(这些任务没有被阻塞或者挂起),可以运行的任务,但是处于就绪态的任务还没有运行,因为有一个同优先级或者更高优先级的任务正在运行!

阻塞态:如果一个任务当前正在等待某个外部事件的话就说它处于阻塞态,比如说如果某个任务调度使用了函数vTaskDelay()的话就会进入阻塞态,直到延时周期完成。任务在等待队列、信号量。事件组。通知或互斥信号量的时候也会进入阻塞态。任务进入阻塞态会有一个超时时间,当超过这个超市时间,任务就会推出阻塞状态,即时所有等待的事件还没有来临。

挂起态:像阻塞态一样,任务进入挂起态以后,也不能被调度器调用进入运行态,但是进入挂起态的任务没有超时时间。任务进入和退出挂起态通过调用vTaskSuspend()和xTaskResume()。

任务状态之间的

猜你喜欢

转载自www.cnblogs.com/doitjust/p/10957944.html
今日推荐