代码基于CVCode PlatformIO ,arduino,都可以运行
/**
* 基于FreeRTOS,可以多个任务并行处理.
* ESP32有两个Tenants Xtensa LX6 微处理器
* 用arduino进行编程时中使用第一个核心,第0核心没有使用
* 多线程可以指定在那个核心运行
*/
#include <Arduino.h>
#include <U8g2lib.h>
#define USE_MULTCORE 1 //定义利用那个核心 0选择用ESP32第0个核心 1不选择核心
//任务1
void xTaskOne(void *xTask1)
{
while(1)
{
Serial.printf("//任务1task1\r\n");
delay(1000);
}
}
//任务2
void xTaskTwo(void *xTask2)
{
while(1)
{
Serial.printf("//任务1task2\r\n");
delay(2000);
}
}
//任务3
void xTaskThree(void *xTask3)
{
while(1)
{
Serial.printf("//任务1task3\r\n");
delay(3000);
}
}
void setup() {
Serial.begin(9600); //配置波特率
delay(10);
#if !USE_MULTCORE
xTaskCreate(
xTaskOne, // 任务函数
"TaskOne", // 任务名称
4096, // 堆栈大小(以字为单位)
NULL, // 传递给任务的参数
1, // 任务的优先级
NULL) ; // 指向任务句柄的指针
xTaskCreate(
xTaskTwo,
"TaskTwo",
4096, //分配内存大小
NULL,
2, //优先级
NULL);
xTaskCreate(
xTaskThree, //任务名称
"TaskThree",
4096, //分配内存大小
NULL,
3, //优先级
NULL);
#else
//最后一个参数决定在那个核心运行
xTaskCreatePinnedToCore(xTaskOne,"TaskOne", 4096,NULL,1,NULL,0);
xTaskCreatePinnedToCore(xTaskTwo,"TaskTwo", 4096,NULL,2,NULL,1);
xTaskCreatePinnedToCore(xTaskThree,"TaskThree", 4096,NULL,3,NULL,0);
#endif
}
void loop() {
while(1)
{
Serial.printf("void loop()\r\n");
delay(4000);
}
}
下载地址https://download.csdn.net/download/vb10101010/89589594?spm=1001.2014.3001.5503