Esp32 模块中已经提供了 FreeRTOS(实时操作系统)固件。 FreeRTOS有助于提高系统性能和管理模块的资源。 FreeRTOS允许用户处理多项任务,如测量传感器读数,发出网络请求,控制电机速度等,所有这些任务都可以同时独立运行。
FreeRTOS为不同的应用程序提供了多个API。 这些 API 可用于创建任务并使其在不同内核上运行。 您需要创建任务以将代码的特定部分分配给特定内核。 您还可以确定代码将在哪个内核上运行的优先级。 优先级值以 level*0 开头。
每当我们在Arduino IDE上运行代码时,默认情况下,它会在core*1上运行。
您可以使用一个函数xPortGetCoreID()来检查代码在哪个内核上运行。
void setup()
{
Serial.begin(115200);
Serial.print( ” setup() is running on: Core_” );
Serial.println( xPortGetCoreID() );
delay(1000);
}
void loop()
{
Serial.print( ” loop() is running on: Core_” );
Serial.println( xPortGetCoreID() );
delay(1000);
}
这段代码中,我们将使用两个led由不同的核心处理。
TaskHandle_t task1;
TaskHandle_t task2;
//将gpio引脚分配给led
const int led1 = LED_BUILTIN;
const int led2 = 25;
void setup() {
Serial.begin(115200 );
pinMode( led1, OUTPUT );
pinMode( led2, OUTPUT );
//创建一个在Task1code()函数中执行的任务,优先级为1,在核心1上执行
xTaskCreatePinnedToCore(task_1code, // Task function.
“Task1”,//任务名称
10000, //任务的堆栈大小
NULL,//任务的参数
1, //任务的优先级
&task1,//跟踪创建任务的任务句柄
1); //指定核心1的任务
delay(1000);
创建一个在Task2code()函数中执行的任务,优先级为1,并在核心1上执行
xTaskCreatePinnedToCore(task_2code, //Task function.
“task2”,//任务名称
10000, //任务的堆栈大小
NULL, //任务的参数
1,//任务的优先级
&task2,//跟踪创建任务的任务句柄
0); //指定核心1的任务
delay(1000);
}
//task_1code: LED每1000毫秒闪烁一次
void task_1code( void * pvParameters ){
Serial.print( “task1 running on: core ” );
Serial.println( xPortGetCoreID() );
for(;;)
{
digitalWrite( led1, HIGH);
delay(1000);
digitalWrite(led1, LOW);
delay(1000);
}
}
//task_2code: LED每500毫秒闪烁一次
void task_2code( void * pvParameters )
{
Serial.print( “task2 running on: core ” );
Serial.println(xPortGetCoreID() );
for(;;){
digitalWrite(led2, HIGH );
delay(500);
digitalWrite(led2, LOW );
delay(500);
}
}
void loop()
{
Serial.print( ” loop() is running on: Core ” );
Serial.println( xPortGetCoreID() );
delay(1000);
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
传感器
+关注
关注
2525文章
48120浏览量
740161 -
FreeRTOS
+关注
关注
12文章
473浏览量
61351 -
实时操作系统
+关注
关注
1文章
184浏览量
30523 -
ESP32
+关注
关注
13文章
896浏览量
15818
发布评论请先 登录
相关推荐
ESP32 Rev 3内存分配差异是什么?
我看到了一些奇怪的东西,想知道新旧 ESP32 Rev 3 芯片(WROVER-E 模块)之间是否存在差异。我有一个围绕 ESP32 设计的产品。最近我们在上一次构建大约一年后进行了新的制造运行
发表于 04-12 06:38
ESP32模组的主要特性
WT-ESP32-DevKitC V4是一款基于ESP32的小型开发板,集WIFI+蓝牙方案于一体,板上模组绝大部分管脚均已引出,开发人员可根据实际需求,轻松通过跳线连接多种外围器件,或将开发板直接
发表于 11-04 14:54
•3476次阅读
ESP32 之 ESP-IDF 教学(九)—— 串口通信(UART)
使用简介二、使用 UART 收发数据1、设置 UART 参数① 单步法(结构体法)② 分步法2、分配引脚,安装驱动二、使用 UART 事件三、自定义 UART 中断一、ESP32 的 UART 概览1、简介ESP32芯片有三个
发表于 11-26 13:21
•42次下载
FreeRTOS消息队列 & ESP32使用
FreeRTOS消息队列 & ESP32实战FreeRTOS消息队列FreeRTOS的消息队列和操作系统课中讲的消息队列大差不差,都是为了有序的、安全的在多任务间在发送信息。下
发表于 12-03 17:51
•1次下载
FreeRTOS信号量 & ESP32实战
FreeRTOS信号量 & ESP32实战阅读建议:有一定操作系统基础知识。FreeRTOS信号量1. 二值信号量 二值信号量通常用于互斥访问或同步,二值信号量和互斥信号量非常类似
发表于 12-03 18:06
•1次下载
nodemcu与matlab,关于ESP8266 NodeMcu和ESP32 DEV模块两者的区别
什么是ESP32?ESP8266 Wi-Fi模块是过去几年中最受欢迎和最实用的模块之一。市场上有这种模块的各种版本。
发表于 12-17 18:03
•2次下载
介绍一个使用ESP32模块开发的信息显示器
这是一个使用ESP32模块开发的信息显示器。同时也可以作为ESP32开发套件,自由实现所需功能,倾向于语音播报、终端显示方向的应用。
评论