物联网操作系统多任务基础
周末休息回来继续学习!
一.多任务基础
1.多任务特性
任务调度机制
1.时间片调度机制
核心为时间片的轮询,同优先级只能通过时间片轮询的调度。
2.抢占调度机制
当任务优先级不一致,低优先级挂起,高优先级先执行,中断(isr)产生优先级最高。
3.任务特性
1.编程简单
2.任务数量没有限制。
3.支持抢占。
4.优先级排序。
5.独立的堆栈。任务切换时需要切换CPU的运行环境。(所以操作系统的特性)
4.任务的状态
任务一共有四种状态:
1.挂起态:任务在挂起状态时,将不会被调度器所调度。
2.就绪态:任务将运行时等待任务调度的状态。
3.阻塞态:osDelay,给任务一个延时,使他阻塞,然后等待调度器的调度。
4.运行态:
5.任务优先级
2.多任务实现
每个任务都是由3部分实现
(1)死循环
(2)任务实体
(3)任务退出:无返回值。
void freertosTask(void const * argument){
for(;;){
osDelay();
}
}
任务控制块
任务控制块是描述任务属性的结构体。
三、任务堆栈
二、任务创建
1.创建任务
(1)任务创建API
xTaskCreate();//动态创建任务 使用时 configSUPPORT_DYNAMIC_ALLOCATION必须置1
xTaskCreateStatic(); 使用时 ConfigSUPPORT_STATIC_ALLICATION置1.
(2)使用cubemax在任务中1s打印一次任务运行标志
复制上篇工程,使能串口配置为异步通信,打开FreeRTos在配置选项一栏选择内存配置,配置为动态静态混用。
配置完成之后创建串口任务,生成keil文件。
工程如下
(3)使用按键控制Led任务挂起和恢复
void vTaskSuspend( TaskHandle_t pxTaskToSuspend ); // 挂起
void vTaskResume( TaskHandle_t pxTaskToResume ); //恢复
源码:https://download.csdn.net/download/ay1204/86261003