欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ESP32學(xué)習(xí)筆記:雙核

CHANBAEK ? 來源:跳動(dòng)的字節(jié) ? 作者:曉宇 ? 2023-07-15 16:16 ? 次閱讀

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

ESP32的雙核

ESP32上是有兩個(gè)核心的,配備了2個(gè) Xtensa 32 位 LX6 微處理器:核心0和核心1,默認(rèn)是運(yùn)行在核心1的,我們可以在代碼中創(chuàng)建一個(gè)任務(wù)在核心0上面運(yùn)行,進(jìn)行并行的多任務(wù)處理。

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

圖片

我們可以通過一個(gè)函數(shù)來識別代碼在哪個(gè)內(nèi)核中運(yùn)行

xPortGetCoreID()

這個(gè)函數(shù)會返回運(yùn)行的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是運(yùn)行在FreeRTOS實(shí)時(shí)操作系統(tǒng)上的,我們的loop()函數(shù)就是內(nèi)核1的一個(gè)任務(wù),我們在創(chuàng)建任務(wù)的時(shí)候,可以指定運(yùn)行在哪個(gè)核心。下面的需要一點(diǎn)FreeRTOS的基礎(chǔ),如果沒接觸的可以先自行了解一下,這里推薦野火的《FreeRTOS內(nèi)核實(shí)現(xiàn)與應(yīng)用開發(fā)實(shí)戰(zhàn)指南》這本書,講的非常棒!

新建任務(wù)

創(chuàng)建任務(wù)句柄

我們這里創(chuàng)建一個(gè)Task1

TaskHandle_t Task1;

創(chuàng)建任務(wù)

設(shè)置任務(wù)的執(zhí)行函數(shù),優(yōu)先級,堆棧大小,運(yùn)行在哪個(gè)內(nèi)核等參數(shù)

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 */

具體的任務(wù)函數(shù)

這里是一個(gè)無限循環(huán),任務(wù)1的代碼在這里實(shí)現(xiàn),然后每隔一段時(shí)間片,就去執(zhí)行當(dāng)前更高優(yōu)先級的任務(wù)。

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

任務(wù)刪除

vTaskDelete(Task1);

多任務(wù)案例

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

/*
 *      Created on: 20220316      
 *      Author:     公眾號:跳動(dòng)的字節(jié)
 *      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() {
  
}

實(shí)際效果

串口打?。?/p>

圖片

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

圖片

led1每1秒閃爍一次,led2每500ms閃爍一次,這樣就是真正的兩個(gè)內(nèi)核同時(shí)運(yùn)行兩個(gè)不同的任務(wù)。

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

感謝大家,關(guān)于ESP32的學(xué)習(xí),希望大家Enjoy!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    456

    文章

    51243

    瀏覽量

    427619
  • 微處理器
    +關(guān)注

    關(guān)注

    11

    文章

    2274

    瀏覽量

    82802
  • 雙核
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    15253
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6477

    瀏覽量

    187915
  • ESP32
    +關(guān)注

    關(guān)注

    18

    文章

    980

    瀏覽量

    17554
收藏 人收藏

    評論

    相關(guān)推薦

    基于Arduino IDE進(jìn)行的ESP32編程方案

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

    請問ESP32如何使用隊(duì)列進(jìn)行任務(wù)間通信?

    隊(duì)列是什么?ESP32如何使用隊(duì)列進(jìn)行任務(wù)間通信?
    發(fā)表于 01-14 07:24

    如何用來實(shí)現(xiàn)ESP32的藍(lán)牙打印機(jī)打印

    來實(shí)現(xiàn)ESP32的藍(lán)牙打印機(jī)打印目的程序編制總結(jié)目的開發(fā)一個(gè)儀表,在使用過程中發(fā)現(xiàn)用ESP32控制打印機(jī)和主控制有沖突,會造成數(shù)據(jù)采集流程慢。而控制藍(lán)牙打印的過程需要回調(diào)函數(shù),速
    發(fā)表于 01-25 08:05

    ESP32ESP-IDF學(xué)習(xí)筆記

    ESP32ESP-IDF 學(xué)習(xí)筆記(六)【I2C數(shù)據(jù)總線(I2C)】文章目錄ESP32ESP
    發(fā)表于 02-22 07:30

    請問ESP32-DevKitM-1開發(fā)板是單核還是?

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

    ESP32-WROOM-32E和ESP32-WROOM-32UE模組的區(qū)別

    ESP32-WROOM系列模組基于 ESP32-D0WD 芯片設(shè)計(jì),適用于基于 Wi-Fi 和藍(lán)牙連接的應(yīng)用場景,具備強(qiáng)大的
    發(fā)表于 06-01 16:41 ?1.9w次閱讀
    <b class='flag-5'>ESP32</b>-WROOM-32E和<b class='flag-5'>ESP32</b>-WROOM-32UE模組的區(qū)別

    ESP32 開發(fā)筆記(四)LVGL控件學(xué)習(xí) Window 窗口控件 X

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

    ESP32CPU,利用0實(shí)現(xiàn)藍(lán)牙打印機(jī)打印,1完成常規(guī)控制

    來實(shí)現(xiàn)ESP32的藍(lán)牙打印機(jī)打印目的程序編制總結(jié)目的開發(fā)一個(gè)儀表,在使用過程中發(fā)現(xiàn)用ESP32控制打印機(jī)和主控制有沖突,會造成數(shù)據(jù)采集流程慢。而控制藍(lán)牙打印的過程需要回調(diào)函數(shù),速
    發(fā)表于 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實(shí)現(xiàn)藍(lán)牙打印機(jī)打印,<b class='flag-5'>核</b>1完成常規(guī)控制

    [ESP32]學(xué)習(xí)筆記02

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

    [ESP32]學(xué)習(xí)筆記04

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

    SPI主線協(xié)議——ESP32學(xué)習(xí)筆記

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

    ESP32 單片機(jī)學(xué)習(xí)筆記 - 04 - ADC和定時(shí)器

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

    如何使用Arduino IDE進(jìn)行ESP32編程

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

    基于ESP-WROOM-32E專為IoT設(shè)計(jì)的FireBeetle ESP32-E主控板介紹

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

    ESP32學(xué)習(xí)筆記:WiFi

    今天我們來說說ESP32 的WiFi。
    的頭像 發(fā)表于 07-15 16:20 ?4248次閱讀
    <b class='flag-5'>ESP32</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>:WiFi