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)行。 您需要?jiǎng)?chuàng)建任務(wù)以將代碼的特定部分分配給特定內(nèi)核。 您還可以確定代碼將在哪個(gè)內(nèi)核上運(yùn)行的優(yōu)先級(jí)。 優(yōu)先級(jí)值以 level*0 開頭。
每當(dāng)我們在Arduino IDE上運(yùn)行代碼時(shí),默認(rèn)情況下,它會(huì)在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)先級(jí)為1,在核心1上執(zhí)行
xTaskCreatePinnedToCore(task_1code, // Task function.
“Task1”,//任務(wù)名稱
10000, //任務(wù)的堆棧大小
NULL,//任務(wù)的參數(shù)
1, //任務(wù)的優(yōu)先級(jí)
&task1,//跟蹤創(chuàng)建任務(wù)的任務(wù)句柄
1); //指定核心1的任務(wù)
delay(1000);
創(chuàng)建一個(gè)在Task2code()函數(shù)中執(zhí)行的任務(wù),優(yōu)先級(jí)為1,并在核心1上執(zhí)行
xTaskCreatePinnedToCore(task_2code, //Task function.
“task2”,//任務(wù)名稱
10000, //任務(wù)的堆棧大小
NULL, //任務(wù)的參數(shù)
1,//任務(wù)的優(yōu)先級(jí)
&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)注
2548文章
50667瀏覽量
751947 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
483瀏覽量
62001 -
實(shí)時(shí)操作系統(tǒng)
+關(guān)注
關(guān)注
1文章
196瀏覽量
30738 -
ESP32
+關(guān)注
關(guān)注
17文章
958瀏覽量
17083
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論