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