色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP32學習筆記:雙核

CHANBAEK ? 來源:跳動的字節 ? 作者:曉宇 ? 2023-07-15 16:16 ? 次閱讀

今天我們來說說ESP32 for Arduino 的雙核。

ESP32的雙核

ESP32上是有兩個核心的,配備了2個 Xtensa 32 位 LX6 微處理器:核心0和核心1,默認是運行在核心1的,我們可以在代碼中創建一個任務在核心0上面運行,進行并行的多任務處理。

我們看一下官方的芯片資源框圖,這里是有兩個Core的:

圖片

我們可以通過一個函數來識別代碼在哪個內核中運行

xPortGetCoreID()

這個函數會返回運行的Core ID號。

我們通過以下代碼測試一下

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());
}

我們看一下打印的情況

70458680f79e054fe3fbba6ce0323ae8.png

Arduino for ESP32是運行在FreeRTOS實時操作系統上的,我們的loop()函數就是內核1的一個任務,我們在創建任務的時候,可以指定運行在哪個核心。下面的需要一點FreeRTOS的基礎,如果沒接觸的可以先自行了解一下,這里推薦野火的《FreeRTOS內核實現與應用開發實戰指南》這本書,講的非常棒!

新建任務

創建任務句柄

我們這里創建一個Task1

TaskHandle_t Task1;

創建任務

設置任務的執行函數,優先級,堆棧大小,運行在哪個內核等參數

xTaskCreatePinnedToCore(
      Task1code, /* Function to implement the task */
      "Task1", /* Name of the task */
      10000,  /* Stack size in words */
      NULL,  /* Task input parameter */
      0,  /* Priority of the task */
      &Task1,  /* Task handle. */
      0); /* Core where the task should run */

具體的任務函數

這里是一個無限循環,任務1的代碼在這里實現,然后每隔一段時間片,就去執行當前更高優先級的任務。

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

任務刪除

vTaskDelete(Task1);

多任務案例

下面的代碼,我們以不同的時間讓LED燈閃爍,然后Task1運行在core0,Task運行在core1。

/*
 *      Created on: 20220316      
 *      Author:     公眾號:跳動的字節
 *      Function    12 ESP32的雙核
 *      Version:    V1.0
 *
 *                        ,%%%%%%%%,
 *                      ,%%/%%%%/%%
 *                     ,%%%c''''J/%%%
 *           %.        %%%%/ o  o %%%
 *           `%%.      %%%%       |%%%
 *            `%%      `%%%%(__Y__)%%'
 *            //        ;%%%%`-/%%%'
 *            ((      /   `%%%%%%%'
 *                  .'           |
 *                 /          | |
 *               /          ) | |
 *                          /_ | |__
 *                (____________))))))) 攻城獅
 *
 */
 
TaskHandle_t Task1;
TaskHandle_t Task2;

// LED pins
const int led1 = 2;
const int led2 = 4;

void setup() {
  Serial.begin(115200); 
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);

  //create a task that will be executed in the Task1code() function, with priority 1 and executed on core 0
  xTaskCreatePinnedToCore(
                    Task1code,   /* Task function. */
                    "Task1",     /* name of task. */
                    10000,       /* Stack size of task */
                    NULL,        /* parameter of the task */
                    1,           /* priority of the task */
                    &Task1,      /* Task handle to keep track of created task */
                    0);          /* pin task to core 0 */                  
  delay(500); 

  //create a task that will be executed in the Task2code() function, with priority 1 and executed on core 1
  xTaskCreatePinnedToCore(
                    Task2code,   /* Task function. */
                    "Task2",     /* name of task. */
                    10000,       /* Stack size of task */
                    NULL,        /* parameter of the task */
                    1,           /* priority of the task */
                    &Task2,      /* Task handle to keep track of created task */
                    1);          /* pin task to core 1 */
    delay(500); 
}

//Task1code: blinks an LED every 1000 ms
void Task1code( void * pvParameters ){
  Serial.print("Task1 running on core ");
  Serial.println(xPortGetCoreID());

  for(;;){
    digitalWrite(led1, HIGH);
    delay(1000);
    digitalWrite(led1, LOW);
    delay(1000);
  } 
}

//Task2code: blinks an LED every 500 ms
void Task2code( void * pvParameters ){
  Serial.print("Task2 running on core ");
  Serial.println(xPortGetCoreID());

  for(;;){
    digitalWrite(led2, HIGH);
    delay(500);
    digitalWrite(led2, LOW);
    delay(500);
  }
}

void loop() {
  
}

實際效果

串口打印:

圖片

硬件連接非常簡單,IO2與IO4各接一個LED燈即可,我們看看效果:

圖片

led1每1秒閃爍一次,led2每500ms閃爍一次,這樣就是真正的兩個內核同時運行兩個不同的任務。

到這里,12篇基礎教程已經講完了,大家對ESP32也有所了解了,接下來我們講進階教程,開始玩起WiFi和藍牙以及各種傳感器以及屏幕等,有了WiFi,我們就可以與外界進行通信,能做一些超級好玩的項目。

感謝大家,關于ESP32的學習,希望大家Enjoy!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    456

    文章

    51140

    瀏覽量

    426150
  • 微處理器
    +關注

    關注

    11

    文章

    2273

    瀏覽量

    82652
  • 雙核
    +關注

    關注

    0

    文章

    37

    瀏覽量

    15228
  • Arduino
    +關注

    關注

    188

    文章

    6477

    瀏覽量

    187572
  • ESP32
    +關注

    關注

    18

    文章

    977

    瀏覽量

    17463
收藏 人收藏

    評論

    相關推薦

    基于Arduino IDE進行的ESP32編程方案

    稱為ESP32。它具有藍牙和Wi-Fi連接,并在許多物聯網項目中使用了ESP32。但是很少有人知道ESP32微控制器。
    的頭像 發表于 01-09 11:25 ?1.6w次閱讀
    基于Arduino IDE進行的<b class='flag-5'>ESP32</b>編程方案

    請問ESP32如何使用隊列進行任務間通信?

    隊列是什么?ESP32如何使用隊列進行任務間通信?
    發表于 01-14 07:24

    如何用來實現ESP32的藍牙打印機打印

    來實現ESP32的藍牙打印機打印目的程序編制總結目的開發一個儀表,在使用過程中發現用ESP32控制打印機和主控制有沖突,會造成數據采集流程慢。而控制藍牙打印的過程需要回調函數,速
    發表于 01-25 08:05

    ESP32ESP-IDF學習筆記

    ESP32ESP-IDF 學習筆記(六)【I2C數據總線(I2C)】文章目錄ESP32ESP
    發表于 02-22 07:30

    請問ESP32-DevKitM-1開發板是單核還是

    ESP32-MINI-1 模塊,根據文檔 ( https://www.espressif.com/sites/default ... eet_en.pdf ),它是一個微處理器:1.1 特點CPU 和片上
    發表于 03-01 07:05

    ESP32-WROOM-32E和ESP32-WROOM-32UE模組的區別

    ESP32-WROOM系列模組基于 ESP32-D0WD 芯片設計,適用于基于 Wi-Fi 和藍牙連接的應用場景,具備強大的
    發表于 06-01 16:41 ?1.9w次閱讀
    <b class='flag-5'>ESP32</b>-WROOM-32E和<b class='flag-5'>ESP32</b>-WROOM-32UE模組的區別

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X

    ESP32 開發筆記(四)LVGL控件學習 Window 窗口控件 X
    發表于 11-14 09:06 ?6次下載
    <b class='flag-5'>ESP32</b> 開發<b class='flag-5'>筆記</b>(四)LVGL控件<b class='flag-5'>學習</b> Window 窗口控件 X

    ESP32CPU,利用0實現藍牙打印機打印,1完成常規控制

    來實現ESP32的藍牙打印機打印目的程序編制總結目的開發一個儀表,在使用過程中發現用ESP32控制打印機和主控制有沖突,會造成數據采集流程慢。而控制藍牙打印的過程需要回調函數,速
    發表于 11-30 17:51 ?14次下載
    <b class='flag-5'>ESP32</b><b class='flag-5'>雙</b><b class='flag-5'>核</b>CPU,利用<b class='flag-5'>核</b>0實現藍牙打印機打印,<b class='flag-5'>核</b>1完成常規控制

    [ESP32]學習筆記02

    [ESP32學習筆記02]使用ViusalStudio2017開發ESP32、按鍵輸入檢測前言一、安裝Visual Studio 2017二、配置開發環境1.安裝ViusalGDB2.
    發表于 12-03 17:36 ?23次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>02

    [ESP32]學習筆記04

    Analog-to-Digital Converter(模數轉換器)的使用今天我們學習ESP32提供的ADC外設的使用,ESP32的每個ADC單元都支持兩種模式,單次讀取和連續讀取(DMA),本次
    發表于 12-22 19:02 ?9次下載
    [<b class='flag-5'>ESP32</b>]<b class='flag-5'>學習</b><b class='flag-5'>筆記</b>04

    SPI主線協議——ESP32學習筆記

    目錄SPI主線協議——ESP32學習筆記零、前言一、什么是SPI?二、通信過程?三、極性和相位四、總結SPI主線協議——ESP32學習
    發表于 12-22 19:23 ?18次下載
    SPI主線協議——<b class='flag-5'>ESP32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>

    ESP32 單片機學習筆記 - 04 - ADC和定時器

    ESP32 單片機學習筆記 - 04 - ADC和定時器一、模擬數字轉換器 ADC編程指南:Analog to Digital Converter。數據手冊: ESP32 技術參考手冊
    發表于 01-17 13:18 ?11次下載
    <b class='flag-5'>ESP32</b> 單片機<b class='flag-5'>學習</b><b class='flag-5'>筆記</b> - 04 - ADC和定時器

    如何使用Arduino IDE進行ESP32編程

    ——它的名字是ESP32。它具有藍牙和 Wi-Fi 連接,我們已經解釋了 ESP32 的 BLE 功能,并在許多物聯網項目中使用了 ESP32 。但很少有人知道ESP32
    的頭像 發表于 08-18 17:20 ?2.6w次閱讀
    如何使用Arduino IDE進行<b class='flag-5'>ESP32</b><b class='flag-5'>雙</b><b class='flag-5'>核</b>編程

    基于ESP-WROOM-32E專為IoT設計的FireBeetle ESP32-E主控板介紹

    它就是來自DFRobot的基于ESP-WROOM-32E芯片、專為IoT設計FireBeetle ESP32-E主控板。
    的頭像 發表于 10-09 11:46 ?5041次閱讀

    ESP32學習筆記:WiFi

    今天我們來說說ESP32 的WiFi。
    的頭像 發表于 07-15 16:20 ?4147次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學習</b><b class='flag-5'>筆記</b>:WiFi
    主站蜘蛛池模板: 一个吃奶两个添下面H| 一本到高清视频在线观看三区| 亚久久伊人精品青青草原2020| 国厂精品114福利电影| 肉伦禁忌小说np| 午夜天堂AV久久久噜噜噜| JLZZJLZZJLZ老师好多的水| 伦理片秋霞免费影院| 中文字幕亚洲第一| 看免费人成va视频全| 在线观看qvod| 快播可乐网| 91青青草原| 欧美大jiji| 别停好爽好深好大好舒服视频| 欧洲内射XXX高清| 边做边爱播放3免费观看| 日本成熟bbxxxxxxxx| 纯肉合集(高H)| 无码任你躁久久久久久老妇双奶| 国产精品久久久久婷婷五月色婷婷| 四虎国产精品免费观看视频| 与邻居换娶妻子2在线观看| 久草视频在线观看免费4| 日韩欧美一级| 国产成人久久精品AV| 无止侵犯高H1V3无止侵犯| 国产在线播放91| 中文字幕AV亚洲精品影视| 女教师杨雪的性荡生活| 成人免费在线视频| 秀婷程仪公欲息肉婷在线观看| 果冻传媒免费观看| 3D内射动漫同人资源在线观看| 欧美人妇无码精品久久| 鬼灭之刃花街篇免费樱花动漫 | FREESEXVIDEO 性老少配| 欧美另类老女人| 国产成人小视频在线观看| 亚洲美女视频高清在线看| 麻豆成人AV久久无码精品|