本帖最后由 吹向陆地的风 于 2020-5-13 12:52 编辑
esp32有一大一小两个核,默认但在Arduino中只使用了大核,使得esp32的双核设计无用武之地,但Arduino中调用双核好像没啥教程,所以收集资料写了一个。[mw_shl_code=arduino,true]#include <soc/soc.h>
#include <soc/rtc_cntl_reg.h>
void Task1code( void *pvParameters );
void Task2code( void *pvParameters );
//wifi在core0,其他在core1;1为大核
void setup() {
WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);//关闭低电压检测,避免无限重启
xTaskCreatePinnedToCore(Task1code, "Task1", 10000, NULL, 1, NULL, 0);//
xTaskCreatePinnedToCore(Task2code, "Task2", 10000, NULL, 1, NULL, 1);//
//实现任务的函数名称(task1);任务的任何名称(“ task1”等);分配给任务的堆栈大小,以字为单位;任务输入参数(可以为NULL);任务的优先级(0是最低优先级);任务句柄(可以为NULL);任务将运行的内核ID(0或1)
Serial.begin(115200);
}
void loop() {
// put your main code here, to run repeatedly:
}
void Task1code(void *pvParameters) {
//setup部分
for (;;)//相当于loop
{
vTaskDelay(1000);
Serial.print("Task1工作核心");
Serial.println(xPortGetCoreID());
}
}
void Task2code(void *pvParameters) {
//setup部分
for (;;)//相当于loop
{
vTaskDelay(1000);
Serial.print("Task2工作核心");
Serial.println(xPortGetCoreID());
}
}[/mw_shl_code]
在void Task1code(void *pvParameters)和void Task2code(void *pvParameters)中的函数分别在两个核中运行,整个系统基于FreeRTOS,水平有限,如有错误请指正。
|