学习笔记——FreeRTOS中有关于任务的学习

在之前的博客中学习到,FreeRTOS是一个多任务的系统。那么什么是任务呢?

学习笔记——FreeRTOS中有关于任务的学习

                                                                                        抢占式多任务系统

 1、任务特性:简单、没有使用限制、支持抢占、支持优先级、每个任务都有堆栈(因此RAM使用量较大)、使用抢占需考虑重入问题。

2、任务状态:

         运行态:就是cpu当前正在执行某一任务,该任务即处于运行态。

         就绪态:没有被阻塞或者挂起的任务,可以执行但是由于优先级较高的任务正在执行,该任务即处于就绪态。

         阻塞态:某一个任务正在等待某个外部事件,即处于阻塞态。任务进入阻塞态的几种情况:任务调用了vTaskDelay()函数、任务等待队列、信号量、事件组、通知、或者互斥信号。注意:任务进入阻塞态会有一个超时时间,当超过这个时间就退出阻塞态。即没等到等待的时间。

         挂起态:没有超时时间的阻塞态。有函数vTasksuspend()和vTaskResume()控制。

学习笔记——FreeRTOS中有关于任务的学习

 

 

 

 

3、任务优先级:每一个任务都有优先级,一般为从0到31(可由用户自己配置),数字越大优先级越高,系统先执行优先级高的任务,高优先级任务可以打断低优先级的任务。

4、任务实现:一般由用户自己编写的vTaskFunction(void *pvParameters)实现目标任务。函数之中一般有一个无限循环、和一个可以让FreeRTOS发生任务切换的API函数即可。不允许跳出循环!

5、任务控制块:任务控制块为一个结构体,用于储存每个任务的属性(堆栈大小、任务优先级等等),在创建任务时会自动给每个任务分配一个任务控制块TCB_t(tskTCB)。

6、任务堆栈:当任务调度器进行任务切换时,会将当前的任务现场(CPU寄存器值等)保存在任务堆栈之中(本质是RAM),以保证能恢复现场,使系统从上次任务中断的时候继续执行。