精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

機智云Gokit3.X源代碼分析之串口接收數據這塊的機制

9GxC_IoTMaker ? 來源:未知 ? 作者:李倩 ? 2018-07-13 14:51 ? 次閱讀

昨天分享了整個程序的架構,今天重點分析一下串口接收數據這塊的機制

我們知道,通過串口接收數據一般有3中方式,輪詢、中斷以及DMA。輪詢模式為堵塞模式,必須要定時去查詢收到的數據;中斷模式為非堵塞模式,也是平時用的比較多的,但每次只能接收一個字節;還有一個比較好的方法那就是用串口的空閑中斷+DMA實現串口數據的接收,在接收一幀數據只需要中斷一次,這樣就可以接收不定長數據了。機智云這里采用的方式2,即常規的中斷方式。

數據通訊采用的串口2,引腳為GPIO2和GPIO3,在gizwitsInit()中進行初始化

我們進去看看

上圖主要初始化了一些硬件接口,并開啟中斷,這也是我們一般的寫法,再往下看,看到一個pRb的結構體,這是個什么呢,我們追蹤下,下面是pRb的定義

我們先來解釋下環形緩沖區的原理:

環形緩沖區通常有一個讀指針和一個寫指針。讀指針指向環形緩沖區中可讀的數據,寫指針指向環形緩沖區中可寫的緩沖區。通過移動讀指針和寫指針就可以實現緩沖區的數據讀取和寫入。在通常情況下,環形緩沖區的讀用戶僅僅會影響讀指針,而寫用戶僅僅會影響寫指針。

這里的rbCapacity代表緩沖區的容量,head指向了讀區域,tail指向了寫區域,rbBuff指向緩沖區的入口地址,示意圖入下

明白了結構體的定義,我們接著往下看

rbCreate(),顧名思義,此函數的作用用于創建緩沖區,將緩沖區的head/Tail都指向緩沖區的首地址,那么rbCapacity和rbBuff在哪里賦值的呢?我們返回去看gizwitsInit();

看到這里我們就明白了,繼續往下看

這個函數為刪除緩沖區函數,將結構體里面的數據全部清零

這個函數為獲取緩沖區的總容量,很好理解

接下來這個函數為緩沖區有多少數據可以讀,有三種情況:

1、Head和Tail都指向同一個地址,可讀大小為0,返回0,這種情況只會出現在緩沖區還沒有數據的時候,使用之后就不會出現頭尾重合的現象;

2、Head

3、Head>Tail,如下圖所示,緩沖區已經寫滿,并且從開頭處重新寫了數據,可讀部分為藍灰色區域(rb_capacity(rb) - (rb->rb_head - rb->rb_tail));

接下來的函數為可寫區域大小,直接用總容量rb_capacity(rb)減去可讀區域大小就好了。

然后是讀數據函數,從Head處開始讀,讀取count個數據,放到data地址開始的數據區域,如下圖所示,也是分為三種情況

1、Head

2、Head>Tail,且count中的數據小于從Head到緩沖區尾部的個數,即小于下圖中的藍灰色,與第一種情況一樣,直接復制相應內存,之后修改Head指針即可。

3、Head>Tail,且count中的數據大于從Head到緩沖區尾部的個數,即大于下圖中的看灰色,這種情況我們就先把Head到緩沖區尾部的數據復制到data處,再把綠色區域的復制過去,這里綠色部分并不會超過Tail,寫操作中做了限制。

最后是寫數據函數,把從data指向的地址,寫到Tail指向的地址,寫count個數據,返回成功寫入的個數,在這里判斷了要寫入的數據大小要小于可寫區域大小,防止數據覆蓋,如下圖所示,也是分為三種情況

1、Head

2、Head

3、Head>Tail,這個因為已經做了數據合法判斷,所以直接復制數據就行。如下圖所示

那么明白了串口環形buff的機制,數據是從哪里進入的呢,我們找到串口中斷的入口,

可以看到中斷程序非常簡單,中斷之后直接往緩沖區丟一個數據就行了,采用這種數據結構,大大提高了程序的穩定性,同時操作起數據來也很方便,需要的時候直接去讀緩沖區數據就好了。今天就先分享這么多,下期分享機智云的協議與結構體的定義,謝謝大家!

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

    關注

    14

    文章

    1543

    瀏覽量

    76190
  • 源代碼
    +關注

    關注

    96

    文章

    2944

    瀏覽量

    66668
  • 機智云
    +關注

    關注

    2

    文章

    581

    瀏覽量

    26368

原文標題:Gokit3.0 STM32源代碼分析之二

文章出處:【微信號:IoTMaker,微信公眾號:機智云開發者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    GC211+Gokit3接入機智實現4G開發調試的過程

    本文以圖文方式講解GC211+Gokit3,接入機智,實現4G開發調試的過程。
    的頭像 發表于 06-16 10:35 ?3770次閱讀

    機智GoKit開發板試用進程大匯總(2015.08.07已更新)

    (6.5)https://bbs.elecfans.com/jishu_486535_1_1.html3、【GoKit試用體驗】+ GoKit串口
    發表于 06-05 10:40

    GoKit試用體驗】+機智GoKit開發套件學習分享1開箱圖

    本帖最后由 孤雨冰狐 于 2015-6-9 10:34 編輯 機智GoKit開發套件學習分享1開箱圖今天我申請的機智
    發表于 06-08 17:13

    【萬元大獎】機智智能硬件創新大賽

    帖圖文并茂,有清晰的制作過程;項目必須鏈接上機智自助開發平臺。2)開貼名稱格式:基于Gokit 的作品:【Gokit 3
    發表于 07-06 13:42

    【試用活動】Gokit 2.XGokit 3.X 免費申請試用

    活動主題:Gokit 2.XGokit 3.X 免費申請試用(此活動長期有效)Gokit2 集成了馬達、1600萬色的LED、Wifi模塊
    發表于 08-02 14:24

    機智想說愛你不容易 - 如何開發接入機智的物聯網設備

    的功能和特性比如ECE邊緣計算引擎,RTBD實時大數據平臺,D3動態數據編排引擎等印象發生了很大的改觀。對機智產生了濃厚的興趣,想著做一個
    發表于 09-27 13:26

    Gokit 3試用體驗】(8)微信控制Gokit體驗機智寵物屋

    機智匿名注冊一個機智用戶,獲得用戶 uid 和 token9. 業務根據用戶的 token 以及設備的 did 和 passcod
    發表于 10-02 12:19

    Gokit 3試用體驗】(7)控制繼電器

    的任務,應用里再加個應答重發機制,問題就是這樣解決了。代碼傳上來,有相同興趣的可以討論一下。串口源碼:機智的源碼在這里,跟之前的差不多。
    發表于 10-12 23:29

    MCU代碼自動生成功能,Gokit二次開發視頻教學

    云端生成通用平臺代碼的方法,以及如何將代碼一步步移植到其他平臺。針對已有跨平臺開發經驗的小伙伴,并想在其他硬件平臺上實現機智服務(至少
    發表于 10-31 18:30

    如何使用機智開發一款智能硬件產品

    Gokit3】序列2:Gokit3介紹第3篇:【原創】【魅力Gokit3】序列
    發表于 12-26 15:56

    機智在Amazon Alexa平臺發布Smarthome和Custom Skill,實現亞馬遜Echo直接控制Gokit

    )是一個由自服務API、工具、文件和實例代碼的集合,可輕松構建你自定義的Alexa skills,然后發布。機智開源套件 Gokit 是一塊標準的量產級嵌入式開發板,即代表了通用型智
    發表于 03-31 11:54

    機智2016~2017優秀項目盤點

    】之無線工業粉塵監測儀【Gokit 3倉鼠管家和OpenHamtaro開源項目【Gokit智慧宿舍【
    發表于 09-22 13:03

    機友分享 | 基于Gokit+機智的低成本MCU紅外遙控器

    Gokit,通過機智的物聯網平臺,能夠滿足我的需求,那么怎么來做呢?根據經驗所得,需要對這個工作拆分為幾部分:機智平臺
    發表于 07-07 12:19

    4G模組接入機智gokit3開發板

    )帖子的(3.代碼修改),繼電器部分無需參考即可。3.產品調試將編譯好的代碼燒錄到gokit,燒錄完成之后將4G卡插入ML301-GC211
    發表于 10-31 19:55

    機智Gokit3.X源代碼分析之一

    將每個按鍵的物理GPIO以及長短按回調函數都賦值到相應數組,這里一共初始化了2個按鍵,之后將數組地址傳到keys這個結構體變量,初始化之后就可以通過keys來調用按鍵的所有功能了。按鍵的具體控制原理后面會將。接下來是機智協議的初始化,之后打印一串初始化成功的
    的頭像 發表于 07-13 14:47 ?3140次閱讀