任务创建(一)

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

https://blog.youkuaiyun.com/QL_SD/article/details/151284240?fromshare=blogdetail&sharetype=blogdetail&sharerId=151284240&sharerefer=PC&sharesource=QL_SD&sharefrom=from_linkhttps://blog.youkuaiyun.com/QL_SD/article/details/151284240?fromshare=blogdetail&sharetype=blogdetail&sharerId=151284240&sharerefer=PC&sharesource=QL_SD&sharefrom=from_link

两种创建函数的区别

函数

核心特点

适用场景

xTaskCreate()

创建任务时不指定运行核心,由 FreeRTOS 调度器自动分配到某个核心(多核环境下)

单核处理器,或多核环境下无需指定核心的任务

xTaskCreatePinnedToCore()

多一个 uxCoreID 参数,可强制指定任务运行在某个特定核心(如 0 号核、1 号核)

多核处理器(如 ESP32、STM32H7 等),需要控制任务核心亲和性的场景(如实时性要求高的任务固定到某核,避免调度延迟)

衍生有以下两种,静态内存创建任务(需手动分配任务控制块 TCB 和任务栈的内存),不依赖动态内存分配(malloc)。

xTaskCreateStatic()

xTaskCreatePinnedToCoreStatic()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值