本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;// 读取相应的参数;