久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2061|回復: 15
收起左側

單片機緩存數據接收滿了然后進行平移 代碼怎么寫?

  [復制鏈接]
ID:302293 發表于 2022-3-8 13:38 | 顯示全部樓層 |閱讀模式
   緩存數據接收滿了,數據向左移動,代碼怎么寫
回復

使用道具 舉報

ID:401564 發表于 2022-3-8 18:33 | 顯示全部樓層
你說的是接到一個字節的數據,還是說一個數組的數據
向左移動是什么意思
回復

使用道具 舉報

ID:302293 發表于 2022-3-9 08:41 | 顯示全部樓層
Y_G_G 發表于 2022-3-8 18:33
你說的是接到一個字節的數據,還是說一個數組的數據
向左移動是什么意思

是的,比如刷ID卡獲取的數據,只存20張的卡號,當刷第21張時,卡號向前移動
回復

使用道具 舉報

ID:415064 發表于 2022-3-9 09:01 | 顯示全部樓層
把前面的干掉或者覆蓋
回復

使用道具 舉報

ID:827243 發表于 2022-3-9 09:15 | 顯示全部樓層
這種數據結構叫先進先出的隊列,一般用數組實現,設定20個元素的數組 qu[20],兩個指針,進隊指針 pIn 和出隊指針 pOut

1. 初始化 pIn = pOut = 0;
2. 入隊列  qu[pIn]=data; pIn++; if (pIn>=20) pIn=0;if (pIn==pOut)  隊列已滿
3. 出隊列  if (pIn == pOut) 隊列空,無數據可取 else 取出 qu[pOut] ; pOut++; if (pOut>=20) pOut=0;
回復

使用道具 舉報

ID:302293 發表于 2022-3-9 10:59 | 顯示全部樓層
daemondong 發表于 2022-3-9 09:15
這種數據結構叫先進先出的隊列,一般用數組實現,設定20個元素的數組 qu[20],兩個指針,進隊指針 pIn 和出 ...

                if(CardNum_Old<20)//沒有刷卡記錄。。∽⒁獯郎y試
                        {
                                //原有卡號整體平移
                                if(CardNum_Old>0)
                                {
                                        for(i=0;i<CardNum_Old*6;i++)
                                        {
                                                EEData_Tran=CardNum_Data[(6*CardNum_Old)-i];
                                                CardNum_Data[(6*(CardNum_Old+1))-i]=EEData_Tran;
                                        }
                                }
回復

使用道具 舉報

ID:401564 發表于 2022-3-9 11:15 | 顯示全部樓層
5#已經給出答案了,這方法FIFO,你可以想象成一根兩頭通的管子,東西從這一頭放進去,超過管子長度了,就從那一頭擠出去了
我不太喜歡思考,如果是我的話,就用兩個數組A和B,長度為20,A數組滿了就把這個數組的數據覆蓋到B,再把A清除,B數組保持有一組
整體下來就是保持有20-40個數據
用結構的話,就直接B=A;就完成了數據的復制了
回復

使用道具 舉報

ID:302293 發表于 2022-3-9 11:34 | 顯示全部樓層
daemondong 發表于 2022-3-9 09:15
這種數據結構叫先進先出的隊列,一般用數組實現,設定20個元素的數組 qu[20],兩個指針,進隊指針 pIn 和出 ...

消息滿了往前移動4字節,后面的補上空出的地址
回復

使用道具 舉報

ID:884147 發表于 2022-3-9 15:14 | 顯示全部樓層
sr861126 發表于 2022-3-9 08:41
是的,比如刷ID卡獲取的數據,只存20張的卡號,當刷第21張時,卡號向前移動

可以考慮移指針而不是移數據,數據一旦存入位置就固定了,只移動指針,新數據永遠存在指針為1的位置
回復

使用道具 舉報

ID:466505 發表于 2022-3-9 16:34 | 顯示全部樓層
建鏈表,隨意刪除插入
回復

使用道具 舉報

ID:879809 發表于 2022-3-9 19:31 | 顯示全部樓層
這個問題的答案,都寫在《數據結構》這本書里面了,找本看看吧。
回復

使用道具 舉報

ID:161164 發表于 2022-3-9 21:33 | 顯示全部樓層
假設每次只移一字節
uchar save_buff[20];

for(i = 0;i<19;i++)
{
save_buff[i] = save_buff[i+1];
}
save_buff[19] = new_data;
回復

使用道具 舉報

ID:401564 發表于 2022-3-9 21:57 | 顯示全部樓層
lkc8210 發表于 2022-3-9 21:33
假設每次只移一字節
uchar save_buff[20];

9#已經告訴樓主方法了,但樓主好像不太理解,他又重新發個帖子問........
你這個方法,樓主應該是可以理解的
回復

使用道具 舉報

ID:624769 發表于 2022-3-9 22:49 | 顯示全部樓層
用12樓的方法,可以達到你想要的目的, 但是,建議你用5樓的方法, 原因很簡單, C語言,在做數組搬移的工作的時候,雖然代碼只有寥寥幾句,工作量是相當的大的,在460800波特率的前提下,32個字節的數組搬移速度,都跟不上串口的接收的速度。也許你現在的項目,勉強可以用數組搬移,但是,如果緩沖池更大(128字節)? 傳輸速率更高(2MHz波特率)呢? 所以,出于長遠考慮,還是要用 5 樓的方法比較靠譜。
回復

使用道具 舉報

ID:962286 發表于 2022-3-10 09:25 | 顯示全部樓層
一個合理FIFO從來都是改變指針指向目標存的值,而不是移數據。
回復

使用道具 舉報

ID:824490 發表于 2022-3-10 20:42 | 顯示全部樓層
建一個環形數組緩沖區,每寫入一個數據,把指針指向下一個數據,當數組指針下標溢出則返回數組首址。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 天天爱爱网 | 国产成人免费网站 | 在线观看亚洲精品视频 | 成人av播放 | 91精品国产欧美一区二区成人 | 韩日在线 | 狠狠操你 | 人妖一区 | 日本在线播放 | 国产精品二区三区 | 日本激情视频中文字幕 | 亚洲精品免费在线观看 | 日韩在线观看视频一区 | 日本免费视频在线观看 | 亚洲欧美在线一区 | 亚洲一区中文字幕 | 一级大片免费 | 四虎海外 | 一级二级三级在线观看 | 亚洲自拍偷拍av | 欧美伊人| jizz视频 | 国产精品99免费视频 | 日韩欧美三级 | 亚洲精品一区二区三区免 | 中文字幕亚洲欧美日韩在线不卡 | 中文字幕高清av | 国产在线高清 | 四虎在线观看 | 久草在线高清 | 天堂网中文字幕在线观看 | 日韩精品一区二区三区中文字幕 | h视频在线免费 | 日韩av一区二区在线观看 | 一级做a| 99一区二区 | 拍真实国产伦偷精品 | 国产91黄色 | 亚洲三级免费看 | 亚洲狠狠 | 国产精品久久久久久中文字 |