性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

程序小白
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
初識(shí)Arduino:簡單是簡單了點(diǎn),還是蠻有意思的
基于ESP32快速搭建藍(lán)牙串口透傳應(yīng)用(Arduino)
基于ESP32搭建的藍(lán)牙串口透傳應(yīng)用代碼分析(Arduino)
基于ESP32搭建GPIO-Interrupt應(yīng)用及分析(Arduino)
基于ESP32例程分析Functional-Interrupt(C++淺析)及GPIO-API詳解
基于ESP32——FreeRTOS初識(shí)(Arduino)
作者動(dòng)態(tài) 更多
基于stm32采用PWM驅(qū)動(dòng)伺服控制器學(xué)習(xí)筆記
5天前
基于STM32驅(qū)動(dòng)TM1638學(xué)習(xí)筆記——軟件篇
04-19 12:42
基于TM1638驅(qū)動(dòng)8位數(shù)碼管設(shè)計(jì)分享
02-24 11:26
RT-Thread驅(qū)動(dòng)之路: Studio創(chuàng)建FAL分區(qū)⑤
01-02 08:30
RT-Thread驅(qū)動(dòng)之路: Studio 掛載通用SPI flash④
2024-12-23 13:41

基于ESP32例程分析Functional-Interrupt(C++淺析)及GPIO-API詳解

===================Function-Interrupt應(yīng)用分析===================

      Functional-Interrupt應(yīng)用功能與前一篇GPIO-Interrupt其實(shí)實(shí)現(xiàn)的功能是一樣的,區(qū)別就是,他是C++版本的實(shí)現(xiàn),而且你要知道Arduino中大部分的中間件都是基于C++的實(shí)現(xiàn),而自古C與C++是不分家的,所以我決定挑戰(zhàn)一下我的軟肋,來分析一下這個(gè)C++應(yīng)用的實(shí)現(xiàn)思路。

===================接下來進(jìn)入C++閑聊模式=====================

我覺得你既然會(huì)C,那么你必須會(huì)C++~!?。樯兑@么說?

你學(xué)C已經(jīng)付出了很多的艱辛,其實(shí)距離C++可能就剩下捅破十張窗戶紙的距離,努力一把它會(huì)給你開啟編程界的新大門。C++的復(fù)雜程度其實(shí)在于其實(shí)現(xiàn)的機(jī)制,我相信工作多年你已經(jīng)過了好奇寶寶的年紀(jì),更關(guān)注于實(shí)際的應(yīng)用。

知識(shí)點(diǎn)一:C++中一切皆對象(其實(shí)就是幻象):C語言中的就是結(jié)構(gòu)體類型變量。

結(jié)構(gòu)體類型變量(C語言)≈ 對象(C++語言)。

當(dāng)然一個(gè)簡單的變量也可以看作是一個(gè)對象,但是這么來看其實(shí)就失去了對象的意義。

struct  ≈ class :主要用來定義結(jié)構(gòu)體或者類。

知識(shí)點(diǎn)二:C++很討厭全局變量(雖然我很喜歡),于是他引入了訪問權(quán)限,最常用的就是

public 和private  權(quán)限修飾符。他們主要是規(guī)定了對象內(nèi)部的屬性和方法可以調(diào)用的空間。

public權(quán)限修飾后,可以在對象外部調(diào)用。

private權(quán)限修飾后,只能在對象的內(nèi)部使用。

知識(shí)點(diǎn)三:class類對比與struct有兩個(gè)特殊得函數(shù),一個(gè)叫構(gòu)造函數(shù),一個(gè)叫析構(gòu)函數(shù)。

構(gòu)造函數(shù):在創(chuàng)建一個(gè)對象的時(shí)候被自動(dòng)調(diào)用。

析構(gòu)函數(shù):在銷毀一個(gè)對象的時(shí)候被調(diào)用。

只有對象是以動(dòng)態(tài)分配內(nèi)存的方式創(chuàng)建,才有被析構(gòu)的機(jī)會(huì),搞過多年軟件的我,還是建議你能用靜態(tài)就用靜態(tài),不要在乎那點(diǎn)RAM開銷,不行就換片子。

知識(shí)點(diǎn)四:std開頭的函數(shù)(std代表C++特有)

注解:isr是一個(gè)標(biāo)準(zhǔn)的函數(shù),但是他綁定的時(shí)候是在類中進(jìn)行的,實(shí)際執(zhí)行的應(yīng)該是特定對象的isr,但是在這里綁定的時(shí)候?qū)ο筮€沒出生呢,于是用this指針綁定,這樣isr外部調(diào)用的時(shí)候,調(diào)用的主體是對象。(有點(diǎn)點(diǎn)繞)

================更改軟件并燒錄測試========================

1. 軟件更改button編號(hào):

2. 燒錄到我們的ESP32開發(fā)板中,并連接串口:

3. 測試接線說明:

4. 串口測試數(shù)據(jù)輸出:

===================ESP32補(bǔ)充篇GPIO-API應(yīng)用===================

      閑聊過后,還是來詳細(xì)介紹一下GPIO相關(guān)的功能函數(shù),先看一下工程下關(guān)于GPIO-API定義的文件,esp32-hal-gpio.h文件(看到hal的一瞬間,讓我想起來溫暖的STM32hal庫):

=======================================================1. void pinMode(uint8_t pin,uint8_t mode);

函數(shù)功能:引腳模式設(shè)置

pin參數(shù):IO號(hào)(注意不是引腳編號(hào))

mode參數(shù):IO模式:

                    INPUT: 數(shù)字輸入

                     INPUT_PULLUP: 帶內(nèi)上拉數(shù)字輸入

                     OUTPUT: 數(shù)字輸出

返回值:無

2. void digitalWrite(uint8_t pin,uint8_t value);

函數(shù)功能:設(shè)置引腳輸出電平

pin參數(shù):IO號(hào)(注意不是引腳編號(hào))

value參數(shù):設(shè)置引腳輸出電平HIGH(高)或LOW(低)

返回值:無

3. int digitalRead(uint8_t pin);

函數(shù)功能:讀取引腳電平狀態(tài)。

pin參數(shù):IO號(hào)(注意不是引腳編號(hào))

int返回值:返回引腳的電平

                  HIGH:高電平

                  LOW:低電平

4.void attachInterrupt(uint8_t pin, void (*)(void), int mode);

函數(shù)功能:中斷綁定功能

pin參數(shù):IO號(hào),綁定引腳編號(hào)。

void (*)(void)參數(shù):函數(shù)指針,指向中斷服務(wù)函數(shù)。

mode參數(shù):中斷模式。          

5.void attachInterruptArg(uint8_t pin, void (*)(void*), void * arg, int mode);

這個(gè)API函數(shù)與上面一個(gè)API函數(shù)非常相似,所以我們只講不同之處,首先這個(gè)綁定的中斷服務(wù)例程是一個(gè)帶傳參的例程。

      首先第二個(gè)函數(shù)的指針類型有變化,參數(shù)由void類型變?yōu)榱藇oid*類型,意義完全發(fā)生了變化,這是一個(gè)帶參數(shù)的函數(shù)指針類型,參數(shù)類型為void * 。

      這里就不難理解API在函數(shù)指針的后面多了一個(gè)void * 類型的參數(shù)arg,這個(gè)參數(shù)正是我們函數(shù)指針用到的參數(shù),也就是第三個(gè)參數(shù)為第二個(gè)參數(shù)服務(wù)。

      關(guān)于void * 類型參數(shù),首先這個(gè)參數(shù)是一個(gè)指針類型,而且是一個(gè)void指針類型,也就代表著,你可以是任意類型指針都可以。

6. void detachInterrupt(uint8_t pin);

函數(shù)功能:解除中斷引腳綁定功能。

pin參數(shù):解除具體引腳IO號(hào)。

返回值:無。

             

聲明:本內(nèi)容為作者獨(dú)立觀點(diǎn),不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
本篇所含全部資料,點(diǎn)擊此處留下郵箱我會(huì)發(fā)給你
資料明細(xì):例程源碼在這里,Aruidno的示例中有,只是調(diào)整了一下PIN的引腳號(hào)
覺得內(nèi)容不錯(cuò)的朋友,別忘了一鍵三連哦!
贊 4
收藏 4
關(guān)注 150
成為作者 賺取收益
全部留言
0/200
  • chaochao1545 2021-07-01 18:24
    [null]
    回復(fù)