Freertos学习笔记(一)系统启动流程、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 );
删除任务的两种方式:
1、if((myHandle)!=NULL)xTaskDelete(myHandle);//删除任务 传入参数:句柄
2、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;// 读取相应的参数;
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。