继上一篇的hello world:
【Linux下基于最新稳定版ESP-IDF5.3.2开发esp32s3入门hello world输出【入门一】-CSDN博客】
这一篇我们开始任务的创建。
工程还是用上一篇的hello world作为模板,hello world就不再app_main函数中输出,改成在任务中输出。
一、还是打开hello_world_main.c文件
使用API之前我门需要先了解一下ESP32芯片:
在ESP-IDF 中,核0 和核1 有时分别又被称为PRO_CPU 和APP_CPU。别名PRO_CPU 和APP_CPU反映了典型ESP-IDF 应用程序使用这两个CPU 的方式。负责处理Wi-Fi 或蓝牙等协议相关处理程序的任务通常会分配给核0,因此称核0 为PRO_CPU;而处理应用程序其余部分的任务会分配给核1,因此称核1为APP_CPU。
我们使用 xTaskCreatePinnedToCore 函数创建,这个函数可以指定任务运行的cpu核.
原型:
BaseType_t xTaskCreatePinnedToCore(TaskFunction_t pxTaskCode,
const char *const pcName,
const uint32_t ulStackDepth,
void *const pvParameters,
UBaseType_t uxPriority,
TaskHandle_t *const pxCreatedTask,
const BaseType_t xCoreID)
参数
• pxTaskCode -- 任务函数
• pcName --函数名称
• ulStackDepth -- 堆栈深度字节。一般 2048
• pvParameters -- 任务参数,我们这里没有
• uxPriority -- 任务优先级,freertos系统任务优先级值越大优先级越高
• pxCreatedTask -- 任务句柄,我们没有任务通讯暂时也用不到
• xCoreID -- 指定任务运行的核,有以下三个值,我们选择1。
• 0:将创建的任务分配给核0
• 1:将创建的任务分配给核1
• tskNO_AFFINITY:支持任务在两个核上运行
返回pdPASS创建成功
二、创建任务【HelloWorldTask】
xTaskCreatePinnedToCore(HelloWorldTask,
"HelloWorldTask",
2048,
NULL,
4,
NULL,
1);
三、创建好任务,还没有任务函数,需要写任务函数。
void HelloWorldTask(void *param)
{
while(1)
{
ESP_LOGI("freertos task", "my hello world\r\n");
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
}
这个就和其他mcu使用rtos是一样的。
四、编译下载,并启用idf监视器
可以看到也是1000ms输出一次。
下一篇,我们一起学习任务间的通讯,信号量的使用。