日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

读取串口数据

發布時間:2024/4/24 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读取串口数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
讀取串口數據
2017年06月01日 12:10:39閱讀數:700 [cpp]?view plaincopy
  • ??
  • [cpp]?view plaincopy
  • void?UartBuf_WD(UartBuf?*Ringbuf,uint8_t?DataIn)??
  • {??
  • ????
  • ??Ringbuf->pbuf[Ringbuf->Wd_Indx?&?Ringbuf->Mask]?=?DataIn;//數據長度掩碼很重要,這是決定數據環形的關鍵??
  • ??Ringbuf->Wd_Indx++;//寫完一次,寫指針加1,為下一次寫入做準備??
  • ??
  • }??
  • d今天移植一段代碼的時候看到一個挺有意思的寫法(如上),這是一段單片機讀取串口數據的函數,一開始看到的時候我很是懵比,要我以前寫的話或者看的大多數程序都是一個簡單的循環賦值到緩沖數組,索引達到數組的SIZE后再清零,更新賦值。然而這里缺與上一個什么掩碼,索引也沒有任何地方清零,這就讓我比較郁悶了。于是我找到這個Mask所謂的長度掩碼的初始化(如下)

    [cpp]?view plaincopy
  • UartRxbuf.Wd_Indx?=?0;??
  • ??UartRxbuf.Rd_Indx?=?0;??
  • ??UartRxbuf.Mask?=?RX_BUFFER_SIZE?-?1;??
  • ??UartRxbuf.pbuf?=?&rx_buffer[0];??

  • 我們可以看到這里它的初始化值為RX_BUFFER_SIZE-1,這是一個宏,pbuf這個緩沖數組設定的長度也是這個宏,設定的值是128。將它轉化為二進制就是10000000,Mask初始化為127,轉化為二進制01111111。這時候再回到貼的第一段代碼,當Wd_Indx加到128的時候,再&上01111111,就是0了。也就是說它清零的工作是直接在這里就完成了,接下來還是正常的更新賦值。看懂很簡單,但讓我自己這么寫是想不到的,這樣子寫出來的代碼就讓人感覺很簡潔利索,非常值得學習!

    總結

    以上是生活随笔為你收集整理的读取串口数据的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。