esp32FreeRTOS教程——内核分配
生活随笔
收集整理的這篇文章主要介紹了
esp32FreeRTOS教程——内核分配
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Esp32 模塊中已經提供了 FreeRTOS(實時操作系統)固件。FreeRTOS有助于提高系統性能和管理模塊的資源。FreeRTOS允許用戶處理多項任務,如測量傳感器讀數,發出網絡請求,控制電機速度等,所有這些任務都可以同時獨立運行。
FreeRTOS為不同的應用程序提供了多個API。這些 API 可用于創建任務并使其在不同內核上運行。您需要創建任務以將代碼的特定部分分配給特定內核。您還可以確定代碼將在哪個內核上運行的優先級。優先級值以 level_0 開頭。
每當我們在Arduino IDE上運行代碼時,默認情況下,它會在core_1上運行。
您可以使用一個函數來檢查代碼在哪個內核上運行。xPortGetCoreID()
這段代碼中,我們將使用兩個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); }總結
以上是生活随笔為你收集整理的esp32FreeRTOS教程——内核分配的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQK Server实现 LeetCod
- 下一篇: 由一些公司的笔试题目想到的---模拟电路