12、ESP32 双核

2024-04-18 18:37
文章标签 esp32 双核

本文主要是介绍12、ESP32 双核,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、双核介绍

        ESP32 配备 2 个 Xtensa 32 位 LX6 微处理器:核心 0 和核心 1。当我们在Arduino IDE上运行代码时,默认情况下,它运行在内核1上。

        有一个函数可用于标识代码在哪个核心中运行:xPortGetCoreID();

        运行下面代码就可以发现 setup 和 loop 在核心 1 上运行。

#include <Arduino.h>void setup()
{Serial.begin(115200);Serial.print("setup() running on core ");Serial.println(xPortGetCoreID());
}void loop()
{Serial.print("loop() running on core ");Serial.println(xPortGetCoreID());
}


2、创建任务

        Arduino IDE 支持 ESP32 的 FreeRTOS,ESP32 是一个实时操作系统,使我们能够并行处理多个独立运行的任务。

        任务优先级值从 0 开始,其中 0 是最低优先级。

创建任务:

        1、创建任务句柄。

                TaskHandle_t Task1;

        2、 在 setup 创建一个分配给特定核心的任务,使用 xTaskCreatePinnedToCore 功能。该函数采用多个参数,包括优先级和任务应运行的核心(最后一个参数)。

                xTaskCreatePinnedToCore(

                        Task1code, /* 函数来实现任务 */

                        "Task1", /* 任务名称 */

                        10000, /* 堆栈大小(以字表示) */

                        NULL, /* 任务输入参数 */

                        0, /* 任务的优先级 */

                        &Task1, /* 任务处理 */

                        0 /* 核心任务运行的位置 */ );

        3、 创建任务后,创建一个包含所创建任务代码的无限循环函数。

Void Task1code( void * parameter)
{for(;;){Code for task 1 - infinite loop(...)}
}

         4、如果在代码执行期间要删除创建的任务,则可以使用 vTaskDelete(&Task) 函数。

                vTaskDelete(Task1);


3、Code

        示例:在不同内核中创建任务

  • Task1 在核心 0 上运行,点亮 led;
  • Task2 在核心 1 上运行,点亮 led;
#include <Arduino.h>TaskHandle_t Task1;
TaskHandle_t Task2;const int led1 = 2;     // LED pins
const int led2 = 4;     // LED pinsvoid Task1code(void * pvParameters )
{Serial.print("Task1 running on core ");Serial.println(xPortGetCoreID());for(;;){digitalWrite(led1, HIGH);delay(1000);digitalWrite(led1, LOW);delay(1000);} 
}void Task2code( void * pvParameters )
{Serial.print("Task2 running on core ");Serial.println(xPortGetCoreID());for(;;){digitalWrite(led2, HIGH);delay(700);digitalWrite(led2, LOW);delay(700);}
}void setup()
{Serial.begin(115200); pinMode(led1, OUTPUT);pinMode(led2, OUTPUT);// Task1codexTaskCreatePinnedToCore(Task1code,   /* 函数名 */"Task1",     /* 任务名 */10000,       /* 堆栈大小 */NULL,        /* 任务参数 */1,           /* 优先级 */&Task1,      /* 任务处理 */0);          /* 运行位置 */                  delay(500); // Task2codexTaskCreatePinnedToCore(Task2code, "Task2", 1024, NULL, 1, NULL, 1);delay(500); 
}void loop()
{
}

这篇关于12、ESP32 双核的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/915555

相关文章

WIN11 ESP32 IDF + VSCODE 环境搭建[教程向]

前言 目录 前言 安装ESP32-IDF VSCODE插件安装 编译测试 很多时候我们想学习一门新的技能,需要使用全新的开发环境,很多时候我们会在安装环境这个环节卡住很久,这里简单介绍一下ESP32+VSCODE环境搭建。 安装ESP32-IDF https://dl.espressif.cn/dl/esp-idf/?idf=4.4 直接复制上面链接,进入idf下载界面。

Class4——Esp32|Thonny两种方式同过电脑控制LED灯,路由器与电脑自带热点连接ESP32

上一节我们通过路由器和设备创建了连接,不懂可按上节配置 Class3——Esp32|Thonny——网络连接主机-wifi连接(源代码带教程)-CSDN博客文章浏览阅读57次。Esp32|Thonny网络连接主机-wifi连接(源代码带教程)https://blog.csdn.net/m0_66701835/article/details/141960572?spm=1001.2014.3001

物联网之ESP32控制舵机、通过网页设置舵机角度、Web服务、舵机原理、接线、Arduino、WiFi、Http

MENU 前言原理硬件电路设计软件程序设计LEDC输出PWM信号使用第三方库控制舵机网页控制舵机 前言 舵机在电子产品中非常常见,比如四足机器人、固定翼航模等都有应用,因此学习舵机对电子制作非常有意义。本文章使用Arguino的PWM对SG90舵机旋转角度控制。 原理 舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。舵机只

乐鑫 ESP32-P4 无线连接解决方案

ESP32-P4 是乐鑫信息科技推出的一款功能强大的芯片 (SoC) ,专为高性能的应用打造。尽管 ESP32-P4 集成了一系列先进特性,但它并未设置无线连接功能,因此需要额外的连接方案来满足嵌入式系统的多样化需求。乐鑫为 ESP32-P4 提供了三种主要的连接方案:ESP-AT、ESP-Hosted 和 ESP-Extconn。下面我们来探讨每种解决方案的优势、限制和使用场景。 ESP-AT

ESP32!Thonny+MicroPython+ESP32开发环境搭建!!

准备工具: Thonny+MicroPython+ESP32 一.Thonny安装 下载地址:Thonny, Python IDE for beginnershttps://thonny.org/ 二.下载esp32环境——根据型号下载 下载地址:MicroPython - Python for microcontrollershttps://micropython.org/downlo

鹏程万里------esp32 开发编译和烧录

首先编译demo 打开C:\msys32目录下的mingw32.exe然后执行下面的操作 DZ0012+Administrator@DZ0012 MINGW32 ~ # cd .. DZ0012+Administrator@DZ0012 MINGW32 /home # ls Administrator DZ0012+Administrator@DZ0012 MINGW32 /home #

【ESP32 IDF】WS2812B灯驱动

WS2812B灯驱动 1. 简单描述2. 驱动过程3.主函数添加驱动程序 1. 简单描述 开发环境为 IDF5.2.2采用乐鑫官方组件库 组件库地址 : https://components.espressif.com/components/espressif/led_strip/versions/2.5.5 2. 驱动过程 复制led_strip组件命令 在自

esp32 中断最简验证程序

13脚接3.3v脚,显示OK   ,不能直接接5v电压脚 中断程序最好是为各种执行设置标志位。不能处理占用长时间的指令 准备利用中断对超声波模块编程   #include "freertos/FreeRTOS.h"#include "freertos/task.h"#include "driver/gpio.h"#include "esp_log.h"// 定义GPIO引脚和标签

【ESP32】mqtt 发送和接收

一、首先下载MQTT-X软件 二、下载后建立mqtt,设置这些参数 点击连接,然后创建topic主题 三、程序 注释已经写的很清楚了 #include <WiFi.h> // 包含WiFi库,用于连接WiFi网络#include <PubSubClient.h> // 包含MQTT库,用于与MQTT服务器通信// WiFi网络名称和密码const char *ssid

【ESP32 】VScode -window环境配置(adruino开发)(点亮LED)

创建工程 新建工程 、 进行vs code的下载,等待一段时间 工程代码 #include <Arduino.h>// put function declarations here:int myFunction(int, int);void setup() {// put your setup code here, to run once:int result = myFu