main.c
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_log.h"
#include "breathe_led.h"
void taskA(void* pvParameters)
{
while (1)
{
ESP_LOGI("TaskA", "Task A is running...");
vTaskDelay(pdMS_TO_TICKS(1000)); // Simulate work for 1 second
}
}
void MyvTaskList(void *pvParameters)
{
char taskListBuffer[512];//用来存储任务列表信息
while(1)
{
vTaskDelay(pdMS_TO_TICKS(5000)); //每5秒打印一次任务列表
vTaskList(taskListBuffer); //获取所有任务信息
printf("Task List:\n");
printf("Name State Prio Stack Num\n");
printf("****************************************\n");
printf("%s\n", taskListBuffer); //打印任务列表信息
}
}
void app_main(void)
{
xTaskCreate(breathe_led_task, "BreatheTask", 2048, NULL, 5, NULL); // Create the breathing task
xTaskCreate(taskA, "TaskA", 2048, NULL, 5, NULL); // Create Task A
xTaskCreate(MyvTaskList, "TaskList", 4096, NULL, 1, NULL); // Create the task list printer
while (1) {
vTaskDelay(pdMS_TO_TICKS(1000)); // Main task delay to keep it alive
ESP_LOGD("Main task", "Main task is running...");
}
}
CMakeLists.txt
idf_component_register(SRCS "freertos-task.c"
INCLUDE_DIRS "."
REQUIRES
esp_system
driver
log
breathe_led
)
breathe_led
两种创建函数的区别
| 函数 | 核心特点 | 适用场景 |
|---|---|---|
|
| 创建任务时不指定运行核心,由 FreeRTOS 调度器自动分配到某个核心(多核环境下) | 单核处理器,或多核环境下无需指定核心的任务 |
|
| 多一个 | 多核处理器(如 ESP32、STM32H7 等),需要控制任务核心亲和性的场景(如实时性要求高的任务固定到某核,避免调度延迟) |
衍生有以下两种,静态内存创建任务(需手动分配任务控制块 TCB 和任务栈的内存),不依赖动态内存分配(malloc)。
xTaskCreateStatic()
xTaskCreatePinnedToCoreStatic()

被折叠的 条评论
为什么被折叠?



