Esp32 模塊中已經(jīng)提供了 FreeRTOS(實(shí)時(shí)操作系統(tǒng))固件。 FreeRTOS有助于提高系統(tǒng)性能和管理模塊的資源。 FreeRTOS允許用戶處理多項(xiàng)任務(wù),如測量傳感器讀數(shù),發(fā)出網(wǎng)絡(luò)請求,控制電機(jī)速度等,所有這些任務(wù)都可以同時(shí)獨(dú)立運(yùn)行。
FreeRTOS為不同的應(yīng)用程序提供了多個(gè)API。 這些 API 可用于創(chuàng)建任務(wù)并使其在不同內(nèi)核上運(yùn)行。 您需要創(chuàng)建任務(wù)以將代碼的特定部分分配給特定內(nèi)核。 您還可以確定代碼將在哪個(gè)內(nèi)核上運(yùn)行的優(yōu)先級。 優(yōu)先級值以 level*0 開頭。

每當(dāng)我們在Arduino IDE上運(yùn)行代碼時(shí),默認(rèn)情況下,它會在core*1上運(yùn)行。
您可以使用一個(gè)函數(shù)xPortGetCoreID()來檢查代碼在哪個(gè)內(nèi)核上運(yùn)行。
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);
}

這段代碼中,我們將使用兩個(gè)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 );
//創(chuàng)建一個(gè)在Task1code()函數(shù)中執(zhí)行的任務(wù),優(yōu)先級為1,在核心1上執(zhí)行
xTaskCreatePinnedToCore(task_1code, // Task function.
“Task1”,//任務(wù)名稱
10000, //任務(wù)的堆棧大小
NULL,//任務(wù)的參數(shù)
1, //任務(wù)的優(yōu)先級
&task1,//跟蹤創(chuàng)建任務(wù)的任務(wù)句柄
1); //指定核心1的任務(wù)
delay(1000);
創(chuàng)建一個(gè)在Task2code()函數(shù)中執(zhí)行的任務(wù),優(yōu)先級為1,并在核心1上執(zhí)行
xTaskCreatePinnedToCore(task_2code, //Task function.
“task2”,//任務(wù)名稱
10000, //任務(wù)的堆棧大小
NULL, //任務(wù)的參數(shù)
1,//任務(wù)的優(yōu)先級
&task2,//跟蹤創(chuàng)建任務(wù)的任務(wù)句柄
0); //指定核心1的任務(wù)
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);
}

-
傳感器
+關(guān)注
關(guān)注
2576文章
55069瀏覽量
791533 -
FreeRTOS
+關(guān)注
關(guān)注
14文章
499瀏覽量
66964 -
實(shí)時(shí)操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
206瀏覽量
31960 -
ESP32
+關(guān)注
關(guān)注
26文章
1197瀏覽量
21796
發(fā)布評論請先 登錄
基于Arduino IDE進(jìn)行的ESP32編程方案
ESP32模組的主要特性
ESP32 SDIO 使用教程
HC05 藍(lán)牙模塊 連接 ESP32 經(jīng)典藍(lán)牙
FreeRTOS消息隊(duì)列 & ESP32使用
esp32 例程 藍(lán)牙_wifi&藍(lán)牙MCU 該不該選ESP32
nodemcu與matlab,關(guān)于ESP8266 NodeMcu和ESP32 DEV模塊兩者的區(qū)別
如何使用Arduino IDE進(jìn)行ESP32雙核編程
基于ESP32的智能LPG探測器
ESP32 GT U7 GPS模塊開源
LoRa模塊SX1278與ESP32結(jié)合使用的方法-上
ESP32 PWM驅(qū)動電機(jī)
ESP32到ESP32通過Internet進(jìn)行通信
ESP32模塊的FreeRTOS內(nèi)核分配
評論