Freertos学习笔记(一)

此篇文章在2022年1月29日被记录

系统启动流程、Task创建与删除、Task参数传入

本freertos笔记基于esp32-idf开发

第一课 系统启动流程

第一阶段 bootloader

第二阶段 bootloader

第三阶段 应用程序入口

在components文件夹下有bootloader两个阶段的源代码、也有freertos的源代码

启动流程:

    //esp_system
    ENTRY(call_start_cpu0)
    SYS_START_FN
    g_startup_fn
    start_cpu0
    start_cpu0_default
    //freertos
    esp_startup_start_app
    esp_startup_start_app_common
    main_task
    app_main//编程入口,我们的应用在这里写代码

第二课 Task创建与删除

  • 任务函数通常包含传入参数,例如:void my_task(void *pvParam)

  • 如果有需要,也需要建立任务句柄:TaskHandle_t myHandle = NULL;

  • 创建任务:xTaskCreate(myTask,"myTask1",1024,NULL,1,&myHandle );

  • 删除任务的两种方式:

    • if((myHandle)!=NULL)xTaskDelete(myHandle);//删除任务 传入参数:句柄

    • xTaskDelete(NULL); //在任务中自己删除自己

第三课 Task四种参数传入(整数、数组、结构体、字符串)

1、整数

    int testNum=10;
    xTaskCreate(myTask,"myTask1",1024,(void *)&testNum,1,NULL);//整数在这里转换成void*指针
    在任务中使用int *pInt;  pInt = (int*)pvParam;//在这里转换成为int*指针

2、数组

    int testNum={6,7,8};
    xTaskCreate(myTask,"myTask1",1024,(void *)testNum,1,NULL);
    与传统数组指针使用一样

3、结构体

    typedef struct my_struct//创建一个结构体
    {
    int mem1;
    int men2;
    }xStruct;
    xStruct xStructTest = {6,9};//结构体初始化
    xTaskCreate(myTask,"myTask1",1024,(void *)&xStructTest ,1,NULL);//结构体传入
    xStruct  *pStrTest;//在任务函数中新建一个结构体指针
    pStrTest = (xStruct  *)pvParam; 读取传入结构体

4、字符串

    static const char *pcTxt = "hello world";//新建一个字符串
    xTaskCreate(myTask,"myTask1",1024,(void *)pcTxt ,1,NULL);//字符串传入
    char *pcTxtInTask;// 在任务函数中新建一个指针
    pcTxtInTask=(char*)pvParam;// 读取相应的参数;
posted @ 2024-12-06 16:41  shumei52  阅读(66)  评论(0)    收藏  举报