欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

[開源]輕量級環形緩沖區Ring Buffer,非常適合用于MCU嵌入式平臺的串口收發

查看數: 6986 | 評論數: 3 | 收藏 11
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2021-1-30 11:53

正文摘要:

Ring Buffer是一個基于C語言開發的輕量級環形緩沖區,適用于各嵌入式平臺的串口收發等應用場景; 相較于普通的收發緩沖數組,環形緩沖區的操作更加簡單,性能更加強大; 使用Ring Buffer提供的函數,可以輕松實 ...

回復

ID:826745 發表于 2021-1-30 12:13
除了基本的讀寫操作之外,為了更好的利用環形這一特點,我加入了分隔關鍵詞、查詢關鍵詞、刪除數據等功能
基于這些功能您可以在串口收發中實現多段數據的緩存與準確讀取;降低了實時性響應的要求、提升了串口收發的性能
  1. #include <stdio.h>
  2. #include <ring_buffer.h>

  3. #define Read_BUFFER_SIZE        256

  4. //設定一個分隔關鍵詞和關鍵詞的長度(字節)
  5. #define SEPARATE_SIGN       0xCCFB22AA
  6. #define SEPARATE_SIGN_SIZE  4

  7. int main()
  8. {
  9.     //新建緩沖區數組與Ring Buff操作句柄
  10.     uint8_t buffer[Read_BUFFER_SIZE] ;
  11.     ring_buffer RB ;

  12.     //初始化Ring Buff操作句柄,綁定緩沖區數組;
  13.     Ring_Buffer_Init(&RB, buffer, Read_BUFFER_SIZE);

  14.     //記錄段落數量
  15.     uint8_t String_Count = 0 ;

  16.     //向環形緩沖區寫入三段數據,每段之間插入一個分隔關鍵詞
  17.     Ring_Buffer_Write_String(&RB, "ABCDEFGHIJK\r\n", 13);//寫入一段數據
  18.     Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);//插入一個分隔關鍵詞
  19.     String_Count ++ ;//記錄段落數量 +1

  20.     Ring_Buffer_Write_String(&RB, "abcdefg\r\n", 9);
  21.     Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);
  22.     String_Count ++ ;

  23.     Ring_Buffer_Write_String(&RB, "1234\r\n", 6);
  24.     Ring_Buffer_Insert_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE);
  25.     String_Count ++ ;

  26.     while(String_Count != 0)
  27.     {
  28.         uint8_t get[16] ;
  29.         //獲得頭指針到關鍵詞高位的距離,距離-1得到第一段數據的長度
  30.         uint8_t lenght = Ring_Buffer_Find_Keyword(&RB, SEPARATE_SIGN, SEPARATE_SIGN_SIZE) - 1 ;
  31.         Ring_Buffer_Read_String(&RB, get, lenght);//讀取一段數據,保存到get數組
  32.         printf("%s", get);//打印數據
  33.         Ring_Buffer_Delete(&RB, SEPARATE_SIGN_SIZE);//刪除分隔關鍵詞的長度的數據,即刪除關鍵詞
  34.         String_Count -- ;//記錄段落數量 -1
  35.     }

  36.     return 0 ;
  37. }
復制代碼
ID:826745 發表于 2021-1-30 12:13
在這里我展示了如何新建并初始化Ring Buffer、讀寫環形緩沖、查詢數據長度等基礎操作
您可以了解到Ring Buffer的函數命名與參數的風格和基本的使用方法
  1. #include <stdio.h>
  2. #include <ring_buffer.h>

  3. #define Read_BUFFER_SIZE        256

  4. int main()
  5. {
  6.     //新建緩沖區數組與Ring Buff操作句柄
  7.     uint8_t buffer[Read_BUFFER_SIZE] ;
  8.     ring_buffer RB ;

  9.     //初始化Ring Buff操作句柄,綁定緩沖區數組;
  10.     Ring_Buffer_Init(&RB, buffer, Read_BUFFER_SIZE);

  11.     //向環形緩沖區寫入一段字節和一個字節
  12.     Ring_Buffer_Write_String(&RB, "hello world", 11);
  13.     Ring_Buffer_Write_Byte(&RB, '!');

  14.     //獲取已儲存的數據長度,讀出環形緩沖區中的數據并打印
  15.     uint32_t num = Ring_Buffer_Get_Lenght(&RB);
  16.     uint8_t get[16] ;
  17.     Ring_Buffer_Read_String(&RB, get, num);
  18.     printf("%s", get);
  19.    
  20.     return 0 ;
  21. }
復制代碼
ID:826745 發表于 2021-1-30 12:12
復制庫文件至工程中,在源代碼中引用 Ring Buffer 頭文件;
新建一個 uint8_t 數組,數組的大小即是環形緩沖區的大小;
新建 Ring Buffer 操作句柄;
初始化 Ring Buffer 操作句柄,將其與剛才新建的數組綁定,轉換成環形緩沖區;
這時候我們就可以使用庫提供的各種函數對新建的緩沖區進行讀寫等操作;
函數詳細內容請在編程的過程中參考ring_buffer.c內的注釋;

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表