freertos的任务

在公司实际项目中需要用到freertos,这里做一些自己学习的笔记

一、任务

1.每个任务都有自己独立的运行环境,不依赖于系统中其他任务或调度器

2.调度器

  ①:一个时间点只能运行一个任务,具体运行哪个任务由RTOS调度器决定,因此调度器会重复的开启、关闭每个任务

  ②:调度器的职责是确保当前一个任务开始执行的时候,其上下文环境(寄存器值、堆栈内容)和任务上一次退出的时候相同

3.为了做到能够做到2②,每个任务必须有堆栈,这样当任务切换的时候上下文环境保存在堆栈中。任务再次运行的时候就可以从堆栈中取出上下文环境,任务恢复运行

(1)任务的特性

1.简单

2.没有使用限制(任务创建的个数没有限制)

3.支持抢占、支持优先级,使用抢占的话必须仔细考虑重入的问题

扫描二维码关注公众号,回复: 5164889 查看本文章

4.每个任务都拥有堆栈导致RAM使用量增大

(2)任务的状态

任务有四种状态:运行态、就绪态、阻塞态、挂起态,任务运行时永远处于这四种状态之一

1.运行态

  指正在运行,占用CPU的任务。单片机基本都是单核cpu,所以任何时刻只有一个任务储运运行态

2.就绪态

  指以及主备就绪,可以运行的任务,之所以没有运行是因为时间轮转还没到这个任务(因为有一个同优先级或者更高优先级的任务正在运行)

3.阻塞态

  当一个任务在等待外部事件的时候就处于阻塞态,如等待信号量、队列、事件组等。任务阻塞有超时时间。超过时间会退出阻塞处于就绪态

4.挂起态

  和阻塞态一样,任务进入挂起态后不能被调度器调用进行运行态,挂起没有超时时间。任务的挂起使用vTaskSuspend(),恢复使用xTaskResume,恢复后程序处于就绪态

  综上,从图中可知,就绪态是任务的关键状态,其他三种都要和它的转换关系,运行态是最自由的状态,它能够切换到任意状态

(3)任务的优先级

  1.空闲任务

  说到任务的优先级就需要先了解下空闲任务

  很多人都会问为什么要有空闲任务,其实最初的RTOS设计思路是为了防止所有任务都处于阻塞态,而没有任务处于运行态,而处理器总需要执行些代码,从而空闲任务就孕育而生。

  调用vTaskStartScheduler()后RTOS会自动创建一个空闲任务,空闲任务代码量很短小,是最小的任务,其任务的优先级是0(最低优先级)。在空闲任务中可以添加钩子函数

猜你喜欢

转载自www.cnblogs.com/zhuzbyin/p/ghst_zby5.html
今日推荐