- 支持抢占、优先级
- 每个任务都拥有堆栈
- 使用抢占要考虑重入
阻塞态:vTaskDelay(),任务在等待队列、信号量、事件组、通知或互斥信号量的时候。有一个超时时间,当超过这个时间,不论等待的事件是否到来,都会退出阻塞态 挂起态:无超时时间任务优先级
在FreeRTOS中,任务优先级的范围 0~configMAX_PRIORITIES-1。空闲任务优先级默认是0,软件定时器默认是MAX-1,最好不要用这两个优先级
数字越大,优先级越高
默认一个优先级下可以挂多个任务,这些任务使用时间片轮转调度器获取运行时间
任务实现任务的具体内容,比如一个while(1)循环,里面包括任务的应用程序和延时vTaskDelay。如果要退出while(1)要删除vTaskDelete(NULL)此任务
任务控制块描述任务属性的数据结构
任务堆栈任务堆栈用来保存任务现场(CPU寄存器值),创建任务的时候需要指定任务堆栈,任务堆栈的变量类型为StackType_t,再次运行任务时会从上次中断的地方开始运行
任务的创建和删除xTaskCreate() //(常用)用动态方法创建一个任务,内存自动创建 xTaskCreateStatic() //用静态方法创建一个任务,内存需要自己创建内存(空闲任务和软件定时器任务) xTaskDelete(NULL) //删除一个任务,NULL为删除自己,删除别人可以用句柄任务创建删除示例
实现功能: 动态方式创建两个任务,task1和task2 task1:实现led0灯 500ms延时翻转,执行5次后删除task2 task2:实现led1灯 亮100ms,灭900ms写main函数,执行如下3步 写task1和task2实现函数 任务的挂起和恢复
vTaskSuspend() //挂起一个任务 vTaskResume() //恢复一个任务的运行 vTaskResumeFromISR() //中断服务函数中恢复一个任务的运行 任务挂起后堆栈还在,如果删除了任务,对应的堆栈将被释放



