2、任务管理
2022-11-29 20:35:23 0 举报
AI智能生成
FreeRTOS任务管理
作者其他创作
大纲/内容
一个函数 如:void ATaskFunction (void *pvParameters) //Parameter 参数
无返回值 void
每个任务/函数都有自己的栈
可以一个函数,多个调度
什么是任务
BaseType_t font color=\"#64b5f6\
例子 font color=\"#64b5f6\
任务创建0)
void vTaskDelete( TaskHandle_t xTaskToDelete )
参数:vTaskDelete(NULL) 自杀 vTaskDelete(pvTaskCode) 被杀 pvTaskCode --> 自己的句柄 杀人 pvTaskCode --> 别人的句柄
任务删除
创建与删除
范围 0~(configMAX_PRIORITIES – 1),越大优先级越高
优先级
vTaskDelay(2); //等待2个Tick,假设font color=\"#ff00ff\
vTaskDelay(pdMS_TO_TICKS(100)); //等待100ms
Tick(记号)
任务优先级和Tick
时间阻塞
queue(队列)
binary semaphores(二进制信号量)
counting semaphores (计数信号量)
mutexes(互斥量)
recursive mutexes(递归互斥量、互斥锁)
event groups(事件组)
task notifications(任务通知)
同步事件阻塞
阻塞状态(Blocked)
void vTaskSuspend( TaskHandle_t xTaskToSuspend );
参数: NULL(暂停自己) 别人的句柄(暂停别人)
vTaskResume (别的任务调用)
xTaskResumeFromISR(中断程序调用)
退出暂停状态(别人调用) Resume(简历、恢复)
暂停状态(Suspended)
就绪状态(Ready)
任务状态(Runing 、 Not Runing )
vTaskDelay(n)
vTaskDelay:至少等待指定个数的Tick Interrupt才能变为就绪状态
strike style=\"\
vTaskDelayUntil:等待到指定的绝对时刻,才能变为就绪态。
Delay函数
空闲任务优先级为0:它不能阻碍用户任务运行
空闲任务要么处于就绪态,要么处于运行态,永远不会阻塞
空闲任务
执行一些低优先级的、后台的、需要连续执行的函数
测量系统的空闲时间
让系统进入省电模式
钩子函数 Idle Task Hook Functions
定义宏 #define configUSE_IDLE_HOOK 1
使用函数 b style=\
使用前提(FreeRTOS\\Source\\tasks.c )
空闲任务及其钩子函数
configUSE_PREEMPTION 优先级抢占
configUSE_TIME_SLICING 时间片轮转
configIDLE_SHOULD_YIELD 空闲任务是否让步于用户任务
配置(FreeRTOSConfig.h) preemption(优先权) slice(切片)yield
调度算法
任务管理
0 条评论
回复 删除
下一页