主要参考b站宸芯IOT老师的视频,记录自己的笔记,老师讲的主要是linux环境,但配置过程实在太多问题,就直接用windows环境了,老师也有讲一些windows的操作,只要代码会写,操作都还好,开发板用ESP-WROOM-32,其实坑还挺多的,慢慢来吧。
关于ESP32任务创建,乐鑫在freertos的基础上包装了自己的函数接口,主要是为了双核并行等功能,关于双核,可以参照参考文献
有以下几个常用函数
- 首先是任务创建函数xTaskCreatePinnedToCore()
功能和freertos原生的xTaskCreate一样,如果在ESP32的SDK调用xTaskCreate也可以,xTaskCreate会调用xTaskCreatePinnedToCore,并在最后一个函数将核心设为tskNO_AFFINITY,双核都可以
这个函数有7个参数,分别是:
①任务函数指针
②任务名称,本质没有作用,输出log时可能用到
③任务堆栈大小,单位是字节,最小2048,小于2048可能会报错
④任务参数,也就是①的任务函数的参数
⑤任务优先级,configMAX_PRIORITIES的值是25,所以优先级最大24
⑥任务句柄,可以通过句柄挂起函数
⑦分配在哪个内核,0或1
- 然后是延时函数vTaskDelay()
参数是延时的节拍数,这个函数是阻塞型延时,并且不一定在节拍数到达时立刻解除阻塞,还要看系统的调度,精确延时函数是vTaskDelayUntil(),要求不高就用这个普通延时,pdMS_TO_TICKS()可以将ms转换为节拍,比如延时500ms,vTaskDelay(pdMS_TO_TICKS(500));
简单创建一个任务代码:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"void task_500(void* param)
{while (1){ESP_LOGI("main" , "task111111");vTaskDelay(pdMS_TO_TICKS(500));}
}void app_main(void)
{xTaskCreatePinnedToCore(task_500 , "500ms" , 2048 , NULL , 3 , NULL , 1);
}
通过log看,500ms延时还挺精确的
工程可以下载