ESP32学习笔记-双核编程

写在前面

ESP32集成了两个 Tensilica Xtensa LX6 微处理器(核心0和核心1)。

FreeRTOS作为ESP32的操作系统,提供了多任务支持,可以使得这两个核心同时工作。在不使用FreeRTOS的情况下,程序默认跑在核心1上,而核心0主要运行WIFI和bluetooth;如果我们的项目不频繁使用WIFI蓝牙,建议使用多核工作模式,提高我们单片机性能。

开发者可以在 ESP32 的两个核心上并行运行不同的任务,从而显著提高整体性能,尤其是在需要执行大量计算任务或者对实时性要求较高的场景下。

在 ESP32 的双核编程中,每个核心都可以独立运行自己的任务,这些任务可以共享内存或拥有独立的内存区域。开发者需要确保在多个核心之间共享数据时同步和互斥的正确实现,以避免数据竞争和不一致。

测试代码

//定义任务句柄
TaskHandle_t Task0_Handler;
TaskHandle_t Task1_Handler;

void setup()
{
  //开启串口
  Serial.begin(115200);

  //创建并启动Core0的任务
  xTaskCreatePinnedToCore(  
        Task0,                /* 任务函数 */  
        "Task0",              /* 任务名称 */  
        1024 * 1,             /* 栈大小 */  
        NULL,                 /* 任务参数 */  
        1,                    /* 任务优先级 */  
        &Task0_Handler,       /* 任务句柄 */  
        0);                   /* Core 0 */  
  
  //创建并启动Core1的任务
  xTaskCreatePinnedToCore(  
        Task1,                /* 任务函数 */  
        "Task1",              /* 任务名称 */  
        1024 * 1,             /* 栈大小 */  
        NULL,                 /* 任务参数 */  
        1,                    /* 任务优先级 */  
        &Task1_Handler,       /* 任务句柄 */  
        1);                   /* Core 1 */  
}

void loop()
{
  // Empty. Things are done in Tasks.
}

//Task0的实现
void Task0(void *pvParameters)
{  
  while(1)
  {
    //核心0的任务逻辑
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    Serial.print("Task0 running on core ");
    Serial.println(xPortGetCoreID());
  }
}

Task1的实现
void Task1(void *pvParameters)
{  
  while(1)
  {
    //核心1的任务逻辑
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    Serial.print("Task1 running on core ");
    Serial.println(xPortGetCoreID());
  }
}

测试结果

参考

3.在ESP32上充分利用双核的FreeRTOS多核编程_esp32双核编程-CSDN博客

如何使双核心的ESP32开启双核功能同时执行多任务_esp32s3开双核-CSDN博客

  • 19
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值