FreeRTOS使用心得(一)
1、创建任务 整套FreeRTOS系统其实很简单,只需要创建不同的任务,然后启动就可以了。 所以在使用FreeRTOS前,首先得先了解任务的创建方式,具体函数如下: xTaskCreate(xTask_Start,“Start_Task”,1024,NULL,3,&xHandle_Start); 参数说明: xTask_Start : 任务入口函数的指针,通过该指针来标识要运行的任务函数。任务必须实现永不返回(即连续循环),或者应该使用 vTaskDelete 函数终止。 “Start_Task” :任务的描述性名称。这主要是为了方便调试。由 configMAX_TASK_NAME_LEN 定义的最大长度 - 默认为 16。 1024 :指定为字节数的任务堆栈的大小。使用时根据实际单片机字节大小修改数值 NULL :将用作正在创建的任务的参数的指针。当多个组件需要调用同一个任务时,使用该标识进行区分,正常单任务使用可直接置NULL。 3 :任务应该运行的优先级。包含 MPU 支持的系统可以通过设置优先级参数的位 portPRIVILEGE_BIT 来选择在特权(系统)模式下创建任务。例如,要创建优先级为 2 的特权任务,应将 uxPriority 参数设置为 ( 2 | portPRIVILEGE_BIT )。数值越高优先级越大,最高值根据配置文件来定义。 xHandle_Start :用于传回一个句柄,通过该句柄可以引用创建的任务。对任务进行删除或者引用时,可以通过直接操作句柄的方式来操作任务。例如删除开始任务时,就可以直接调用句柄:vTaskDelete(xHandle_Start); 2、管理任务 任务创建成功后,就可以创建开始任务管理所有任务(也可以直接创建,但任务较多时会导致主函数内容过于杂乱,所以直接使用开始任务函数创建),或者使用其他函数将任务分离出来也行。
TaskHandle_t xHandle_Start=NULL;
xTaskCreate(xTask_Start,"Start_Task",1024,NULL,3,&xHandle_Start);
任务创建完成后,放入初始化代码中就可以了。(arduino放入setup后,STM32放入main函数while之前,ESP32放入app_main函数while之前)。 创建开始任务函数实现,在该函数内创建其他需要使用的任务。
void xTask_Start()
{
TaskHandle_t xHandle_1=NULL;
xTaskCreate(xTask_1,"task1",1024,NULL,1,&xHandle_1);
TaskHandle_t xHandle_2=NULL;
xTaskCreate(xTask_2,"task2",1024,NULL,2,&xHandle_2);
TaskHandle_t xHandle_3=NUL L;
xTaskCreate(xTask_3,"task3",1024,NULL,3,&xHandle_3);
vTaskDelete(xTask_Start);
}
void xTask_1()
{
for(;;)
{
vTaskDelay(1000);
}
}
void xTask_2()
{
for(;;)
{
vTaskDelay(1000);
}
}
void xTask_3()
{
for(;;)
{
vTaskDelay(1000);
}
}
|