Task任务的输入参数

文章目录

      • 传参
      • 整数(int)
      • 整数数组
      • 结构体型
      • 字符串
      • 总结
          • 传参流程
          • 遇到的问题


传参

传入参数为void指针

pvParameters

任务函数接受一个指针指向void (void*)类型的参数。分配给pvParameters的值将是传递给任务的值。

整数(int)

//---------------------Task主体函数-------------------------------------
void myTask(void *pvPragma)
{
    int *getNum;
    getNum = (int *)pvPragma;
    printf("Task get num = %d\n",*getNum);
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    vTaskDelete(NULL);
}
//-------------------------------------------------------------------

int IntNum = 1;

void app_main(void)
{
    // 传入参数
    xTaskCreate(myTask, "mytask1", 2048, (void *)IntNum, 1, NULL);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7i95ZM05-1652939181735)(pic/image-20220512131956719.png)]

整数数组

//---------------------Task主体函数-------------------------------------
void myTask(void *pvPragma)
{
    int *pArrayNum;
    pArrayNum = (int *)pvPragma;

    printf("Task get num1 = %d\n", *pArrayNum);

    printf("Task get num2 = %d\n", *(pArrayNum + 1));

    printf("Task get num3 = %d\n", *(pArrayNum + 2));

    vTaskDelay(1000 / portTICK_PERIOD_MS);

    vTaskDelete(NULL);
}
//-------------------------------------------------------------------

int testNum[] = {5, 6, 7};

void app_main(void)
{
    // 传入参数
    xTaskCreate(myTask, "mytask1", 2048, (void *)testNum, 1, NULL);
}

Task任务的输入参数_第1张图片

结构体型

typedef struct A_struct
{
    int num1;
    int num2;
} xStruct;

xStruct testStruct = {7, 9};

//---------------------Task主体函数-------------------------------------
void myTask(void *pvPragma)
{
    xStruct *pStruct;
    pStruct = (xStruct *)pvPragma;

    printf("Task get struct num1 = %d\n", pStruct->num1);

    printf("Task get struct num2 = %d\n", pStruct->num2);

    vTaskDelay(1000 / portTICK_PERIOD_MS);

    vTaskDelete(NULL);
}
//-------------------------------------------------------------------


void app_main(void)
{
    // 传入参数
    xTaskCreate(myTask, "mytask1", 2048, (void *)&testStruct, 1, NULL);
}

Task任务的输入参数_第2张图片

在这里使用的结构体不能使用点语法来访问结构体对象内容

字符串

static const char *pcTxt = "a String";

//---------------------Task主体函数-------------------------------------
void myTask(void *pvPragma)
{
    char *pcTxt_task;

    pcTxt_task = (char *)pvPragma;

    printf("Task get String = %s\n", pcTxt_task);

    vTaskDelay(1000 / portTICK_PERIOD_MS);

    vTaskDelete(NULL);
}
//-------------------------------------------------------------------


void app_main(void)
{
    // 传入参数
    xTaskCreate(myTask, "mytask1", 2048, (void *)pcTxt, 1, NULL);
}

Task任务的输入参数_第3张图片

总结

传参流程
  1. 创建对应参数

  2. 对其地址转换为void *类型

  3. 在Task函数里再转换为对应的类型并使用

遇到的问题

在分配内存大小的时候,如果为1024烧录程序后芯片会出现无限重启的状态,尝试的芯片有esp32s2、esp32s3,分配1024大小的内存空间都会出现这样的问题

你可能感兴趣的:(FreeRTOS,c语言,c++,嵌入式硬件)