FreeRTOS任务基础知识学习笔记

说明:此学习笔记参考正点原子STM32F1 FreeRTOS开发手册,笔记简洁,仅供参考,详细内容请关注正点原子。

1.什么是多任务系统?

  • 多任务系统会把一个大问题(应用)“分而治之”,把大问题划分成很多个小问题,逐步的把 小问题解决掉,大问题也就随之解决了,这些小问题可以单独的作为一个小任务来处理。这些 小任务是并发处理的,注意,并不是说同一时刻一起执行很多个任务,而是由于每个任务执行 的时间很短,导致看起来像是同一时刻执行了很多个任务一样。
  • 高优先级的任务可以打断低优先级任务的运行而取得 CPU 的使用权。

2.任务的几种状态

  • 运行态
  • 就绪态
  • 阻塞态
  • 挂起态

3.任务优先级

  • 每 个 任 务 都 可 以 分 配 一 个 从 0~(configMAX_PRIORITIES-1) 的 优 先 级,这个函数在文件 FreeRTOSConfig.h 中,宏 configUSE_PORT_OPTIMISED_TASK_SELECTION 也 设 置为了1 ,那 么 宏 configMAX_PRIORITIES 不能超过 32,其他情况下可以为任意值,但是考虑到 RAM 的消耗,最好设置为一个满足应用的最小值。
  • 优先级数字越低表示任务的优先级越低,0的优先级最低,configMAX_PRIORITIES-1 的优 先级最高。空闲任务的优先级最低,为 0。

4.任务创建函数

  • 使用函数 xTaskCreate()或 xTaskCreateStatic()来创建任务,一个是动态创建一个是静态创大建,他们的区别在于动态的任务堆栈会自动创建,而静态的堆栈需要用户定义,然后堆栈首地址作为函数的参数 puxStackBuffer 传递给函数。
  • 任务函数本质也是函数,任务函数 的返回类型一定要为 void 类型,任务的参数也是 void 指针类型,任务函数一般不允许跳出循环,如果一定要跳出循环的话在跳出循环以后一定要调用 函数 vTaskDelete(NULL)删除此任务。

5.任务控制块

  • FreeRTOS 的每个任务都有一些属性需要存储,FreeRTOS 把这些属性集合到一起用一个结 构体来表示,这个结构体叫做任务控制块:TCB_t。在使用函数 xTaskCreate()创建任务的时候就 会自动的给每个任务分配一个任务控制块。此结构体在文件 tasks.c 中有定义。

6.任务堆栈

  • 任务调度器在进行任务切换的时候会将当前任务的现场(CPU 寄存器值等)保存在此任务的任务堆栈中,等到此任务下次运行的时候就会先用堆栈中保存的值来恢复现场,恢复现场以后任务就会接着 从上次中断的地方开始运行。
  • 创建任务的时候需要给任务指定堆栈,上面讲有静态和动态的堆栈区别。
  • 任务堆栈的数据类型为 StackType_t,StackType_t 本质上是 uint32_t,在 portmacro.h 中有定义。StackType_t 类型的变量为 4 个字节,那么任务的实际堆栈大小就应该是我们所 定义的 4 倍。
  • 例子:如果给任务分配64的堆栈大小,那么堆栈大小就是64*4=256个字节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值