高优先级后台任务:比如按键检测,触摸检测,USB 消息处理,串口消息处理等,都可以归为这一类任务 低优先级的时间片调度任务:比如 emWin 的界面显示,LED 数码管的显示等不需要实时执行的都可以归为这一类任务
实际应用中用户不必拘泥于将这些任务都设置为优先级 1 的同优先级任务,可以设置多个优先级,只需注意这类任务不需要高实时性
空闲任务:空闲任务是系统任务
特别注意:IRQ 任务和高优先级任务必须设置为阻塞式(调用消息等待或者延迟等函数即可), 只有这样,高优先级任务才会释放 CPU 的使用权,,从而低优先级任务才有机会得到执行
2.3.2 中断优先级与任务优先级中断的优先级永远高于任何任务的优先级,即任务在执行的过程中,中断来了就开始执行中断服务程序
对于 STM32F103,F407 和 F429 来说,中断优先级的数值越小,优先级越高。而 FreeRTOS的任务优先级是,任务优先级数值越小,任务优先级越低
2.3.2 任务调度 2.2.3 相关APIvTaskStartScheduler-任务启动
空闲任务和可选的定时器任务是在调用这个函数后自动创建
正常情况下这个函数是不会返回的,运行到这里极有可能是用于定时器任务或者空闲任务的 heap 空 间不足造成创建失败,此时需要加大 FreeRTOSConfig.h 文件中定义的 heap 大小
如果在此类任务函数里面填的任务 ID 是 NULL,即数值 0 的话,那么执行生效的就是当前正在执行的任务
系统框架写法int main(void) { /* 初始化外设 */ xTaskCreate(); /* 创建开始任务 */ vTaskStartScheduler(); /* 开启任务调度 */ } void start_task(void *pvParameters) { taskENTER_CRITICAL(); /* */进入临界区 xTaskCreate(); /* 创建任务 1 */ xTaskCreate(); /* 创建任务 2 */ xTaskCreate(); /* 创建任务 3 */ vTaskDelete(StartTask_Handler); /* 删除开始任务 */ taskEXIT_CRITICAL(); /* 退出临界区 */ }