ESP32(五) Arduino 多核

/*
//  多线程基于FreeRTOS,可以多个任务并行处理;
//  ESP32具有两个32位Tensilica Xtensa LX6微处理器;
//  实际上我们用Arduino进行编程时只使用到了第一个核(大核),第0核并没有使用
//  多线程可以指定在那个核运行;
 */

#include <Arduino.h>
#define USE_MULTCORE 1//使用多核心

int loopTime=0;
int taskOne=0;
int taskTow=0;

void xTaskOne(void *xTask1)
{
    
    
    while (1)
    {
    
    
        taskOne++;

        String reportString = "xTaskOne:";
        reportString+=xPortGetCoreID();
                reportString+="-";
        reportString+=taskOne;
        Serial.println(reportString);
        delay(1000);
    }
}

void xTaskTwo(void *xTask2)
{
    
    
    while (1)
    {
    
    
        taskTow++;
        String reportString = "xTaskTwo:";
                reportString+=xPortGetCoreID();
        reportString+="-";
        reportString+=taskTow;
        Serial.println(reportString);
        delay(500);
    }
}

void setup()
{
    
    
    Serial.begin(115200);
    delay(10);

    #if !USE_MULTCORE

    xTaskCreate(
        xTaskOne,  /* 任务函数. */
        "TaskOne", /* 名称 */
        4096,      /* 堆栈大小. */
        NULL,      /* 参数输入传递给任务的*/
        1,         /* 任务的优先级*/
        NULL);     /* 任务所在核心 */

    xTaskCreate(
        xTaskTwo,  /* Task function. */
        "TaskTwo", /* String with name of task. */
        4096,      /* Stack size in bytes. */
        NULL,      /* Parameter passed as input of the task */
        2,         /* Priority of the task.(configMAX_PRIORITIES - 1 being the highest, and 0 being the lowest.) */
        NULL);    
#else
    //最后一个参数至关重要,决定这个任务创建在哪个核上.PRO_CPU 为 0, APP_CPU 为 1,或者 tskNO_AFFINITY 允许任务在两者上运行.
    xTaskCreatePinnedToCore(xTaskOne, "TaskOne", 4096, NULL, 1, NULL, 0);//TaskOne在 0核心
    xTaskCreatePinnedToCore(xTaskTwo, "TaskTwo", 4096, NULL, 2, NULL, 1);//TaskOne在 1核心
#endif
}

void loop()
{
    
     
        loopTime++;
        String reportString = "Main loop:";
        reportString+=xPortGetCoreID();
        reportString+="-";
        reportString+=loopTime;
        Serial.println(reportString);
        delay(1000);
}

使用单核心效果

在这里插入图片描述

使用多核心效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/bayinglong/article/details/130938479