首页 > 编程语言 >ESP32学习笔记-双核编程

ESP32学习笔记-双核编程

时间:2024-03-19 15:31:06浏览次数:15  
标签:Task0 Task1 ESP32 编程 任务 void 双核

写在前面

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博客

标签:Task0,Task1,ESP32,编程,任务,void,双核
From: https://blog.csdn.net/ssismm/article/details/136843918

相关文章

  • Python中常用网络编程模块
    一、网络基础网络由下往上分为:物理层、数据链路层、网络怪、传输层、会话层、表示层和应用层。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输;socket则是对TCP/IP协议的封装,它本身不是协议,而是一个调用接口;HTTP、FTP是应用协议,主要解决如何包装数据;TCP连接的三次握手:......
  • PyQt5 GUI编程
    一.PyQt5简介PyQt5是一个用于创建图形用户界面(GUI)应用程序的跨平台工具集,它将Qt库(广泛用于C++编程语言中创建丰富的GUI应用程序)的功能包装给Python使用者。PyQt5是由RiverbankComputing开发的,并且可以在所有主流操作系统上运行,包含Windows、macOS和Linux。PyQt5包括了超过620个......
  • ENGG1330编程解决
    ENGG1330计算机编程课业1ENGG1330计算机程序设计I(第2学期23-24)重要注意事项?在执行此任务时,应仅使用Python内置功能。它是不需要导入任何模块来完成此分配。零分到导入任何模块的程序。如果您不确定,请随时与我们联系clalifica=打开。?虽然编程风格不分级,但强烈建议您使用func=......
  • Java-Java基础学习(2)-网络编程-TCP-UDP
    2.网络编程2.1.通信协议TCP、UDP对比TCP打电话连接,稳定三次握手,四次挥手三次握手A:你瞅啥?B:瞅你咋地?A:干一场!四次挥手A:我要走了B:你真的要走了吗?B:你真的真的要走了吗?A:我真的要走了客户端、服务端传输完成,释放连接,效率低UDP发短信不连......
  • matinal:SAP ABAP OO面向对象编程中的触发和处理事件
    ......
  • 【JavaScript编程实操10】1.实现一个函数,要求传递2个参数,返回两个参数的和 2.创建一个
    前言1、实现一个函数,要求传递2个参数,返回两个参数的和代码:实现效果:2、创建一个函数,传递两个参数,返回两个参数的相乘和相加的和代码:实现效果:总结前言    本次继续针对Javascript阶段的函数与对象相关方面的实操练习,共有2个实操,这两个实操具有相似性,只是一个......
  • 2024/03/18(网络编程·day4)
    一、思维导图二、广播广播发送端#include<myhead.h>intmain(intargc,constchar*argv[]){ //1、创建套接字 intsfd=socket(AF_INET,SOCK_DGRAM,0); if(sfd==-1) { perror("socketerror"); return-1; } //2、设置允许广播 intbroadcast=1;......
  • java常用应用程序编程接口(API)——Stream概述
    前言:stream是jdk8以后新增的API,熟练操作后会非常实用。打好基础,daydayup!!StreamStream也称为Stream流,用于操作集合或者数组的数据。Stream流大量的结合了Lambda的语法风格,使代码更简洁,可读性更好 Stream的使用Stream的使用有三个步骤:1,获取Stream流,与数据源建立连接......
  • FDS编程作业记录 · 其一
    由于上课没有认真听,所以有些题写得磕磕绊绊的,反复改了好几次才全过。故特此整理下问题解答和错误供自己和后来人参考。题目要求概述多项式加和Writeafunctiontoaddtwopolynomials.Donotdestroytheinput.Usealinkedlistimplementationwithadummyheadnod......
  • Python编程规范+最佳实践
    前言Python之禅是影响Python编程语言设计的19条原则,也是Python编码规范的核心理念。优美胜于丑陋(Python以编写优美的代码为目标)明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)复杂胜于凌乱(如果复杂不可避免,......