void uartbuf_wd(uartbuf *ringbuf,uint8_t datain)
d今天移植一段**的時候看到乙個挺有意思的寫法(如上),這是一段微控制器讀取串列埠資料的函式,一開始看到的時候我很是懵比,要我以前寫的話或者看的大多數程式都是乙個簡單的迴圈賦值到緩衝陣列,索引達到陣列的size後再清零,更新賦值。然而這裡缺與上乙個什麼掩碼,索引也沒有任何地方清零,這就讓我比較鬱悶了。於是我找到這個mask所謂的長度掩碼的初始化(如下)
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了。也就是說它清零的工作是直接在這裡就完成了,接下來還是正常的更新賦值。看懂很簡單,但讓我自己這麼寫是想不到的,這樣子寫出來的**就讓人感覺很簡潔利索,非常值得學習!
讀取串列埠資料
讀取串列埠資料 2017年06月01日 12 10 39 閱讀數 700 cpp view plain copy cpp view plain copy void uartbuf wd uartbuf ringbuf,uint8 t datain d今天移植一段 的時候看到乙個挺有意思的寫法 如上 ...
Linux讀取串列埠資料
大致為 有乙個傳送端週期性的往本機串列埠上傳送資料,本機需要定時讀取串列埠資料,解析,獲取自己想要的資訊。實際描述為 由於是做智慧型駕駛的,需要讀取車輛速度,通過obd裝置讀取並解析車輛速度,然後通過藍芽傳送給pc串列埠 也是通過乙個藍芽模組接收 pc端串列埠定時接收串列埠資料並解析。在上述過程中,...
示波器顯示讀取串列埠資料
波特率115200,說明每個byte 1 115200 8.6ns 示波器 1g s 示波器能夠使用的最大取樣速率為1g樣本 秒,就是說示波器在時間最小檔位是的取樣率是每秒採集1g個資料點,時間檔位越大用到的取樣率越小。100mhz 示波器模擬前端的頻寬。100m正弦波輸入示波器時,進過模擬前端後訊...