/*
// 多线程基于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);
}
ESP32(五) Arduino 多核
猜你喜欢
转载自blog.csdn.net/bayinglong/article/details/130938479
今日推荐
周排行