开发板ESP32-Devkitc-v4有两个内核,如何让他们同时工作呢?两个cpu处理的数据可不可以共通呢?找遍也没有资料讲这个事情,也可能时我没找对。这里分享给大家。
目录
实验
废话不多说,直接上代码,就是这么简单粗暴!
#include"string.h"
int testdata0 = 10;
int testdata1 = 0;
void appCpuLoop(void *pvParameters){
while(1){
Serial.println("appCpu1 "+(String)testdata0);
testdata1 ++;
if(testdata1 == 10)
testdata1 = 0;
delay(1000);
}
vTaskDelete(NULL);
}
void setup() {
Serial.begin(9600);
xTaskCreatePinnedToCore(appCpuLoop, //具体实现的函数
"APP_CPU_LOOP", //任务名称
8192, //堆栈大小
NULL, //输入参数
1, //任务优先级
NULL, //
1 //核心 0\1
);
}
void loop() {
Serial.println("main core0 "+(String)testdata1);
testdata0 --;
if(testdata0 == 0)
testdata0 = 10;
delay(1000);
}
做一个解释,就是两个变量,分别在两个cpu核内操作,然后在另外一个核内调用。最后在串口看输出,cpu0轮询周期大约1s,cpu1内函数轮询周期1s。但是输出有点让我迷惑,想了想,原来是执行周期,或者说两个核时序的问题,所数值不是交替出现的。看下图
修改一下loop,但是执行过程还是有可能再次出现上边的情况的(当时间不断变长时)
void loop() {
delay(500);
Serial.println("main core0 "+(String)testdata1);
testdata0 --;
if(testdata0 == 0)
testdata0 = 10;
delay(500);
}
这下看着就舒服多了
修改一下执行周期,再看看。
#include"string.h"
int testdata0 = 10;
int testdata1 = 0;
void appCpuLoop(void *pvParameters){
while(1){
Serial.println("appCpu1 "+(String)testdata0);
testdata1 ++;
if(testdata1 == 10)
testdata1 = 0;
delay(2000);
}
vTaskDelete(NULL);
}
void setup() {
Serial.begin(9600);
xTaskCreatePinnedToCore(appCpuLoop, //具体实现的函数
"APP_CPU_LOOP", //任务名称
8192, //堆栈大小
NULL, //输入参数
1, //任务优先级
NULL, //
1 //核心 0\1
);
}
void loop() {
Serial.println("main core0 "+(String)testdata1);
testdata0 --;
if(testdata0 == 0)
testdata0 = 10;
delay(1000);
}
做一个解释,就是两个变量,分别在两个cpu核内操作,然后在另外一个核内调用。最后在串口看输出,cpu0轮询周期大约1s,cpu1内函数轮询周期2s。没有问题,每输出两次cpu0再一次cpu1的数据,如下图
总结
两个cpu使用的变量数据是可以共通的,cpu调用的方法也在上边了,原loop是默认cpu0的。