任务与协程
区别
一个程序可以只有任务、只有协程、二者都有,但不可以通过队列/信号量互相传递数据
任务特点
-
任务之间可以互相独立
-
每个任务分配自己的堆栈,提高了RAM使用率
-
操作简单、按优先级抢占式执行
-
抢占容易导致重入(执行任务时被其他线程或进程调用了)
协程特点
-
一般用于小型,RAM有限制的处理器上
-
所有协程共用一个堆栈
-
通过一组宏实现的
-
减少了重入问题,但是和任务混用总抢不过人家
任务状态
运行、就绪、阻塞、挂起
任务优先级
-
0--configMAX_PRIORITIES - 1,最大值定义在FreeRTOSConfig.h中
-
设置的越小越好,某些特殊情况不得超过32
-
空闲任务优先级为0
-
默认情况,相同优先级按时间切片轮流运行
任务调度
-
抢占式调度,即使在同一时间片,ISR更改了一个高优先级任务,也会打断当前的低优先级任务。
-
时间片指两个tick中断之间的时间,相同优先级的任务,一人一个时间片依次执行。
-
高优先级任务处于“阻塞”状态时, 低优先级任务会运行。