|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
在RAM中,緩沖區(qū)的設(shè)立與使用 |
| 作者:真水無(wú)香 欄目:單片機(jī) |
我使用mega48單片機(jī)通過(guò)spi口接受數(shù)據(jù),再通過(guò)串口發(fā)到上位機(jī)去,由于spi的速度大于串口的速度,我想在ram中建立一個(gè)緩沖區(qū),來(lái)緩沖spi接受到數(shù)據(jù)。 我在C中定義一個(gè)數(shù)組,如a[20] 定義一個(gè)變量i 收到一個(gè)數(shù)a[i++], 通過(guò)串口發(fā)送一個(gè)數(shù)a[--i] 不過(guò)這樣作,有一個(gè)問(wèn)題。 好像使用緩沖區(qū)以后,spi收到的數(shù)據(jù),與上位機(jī)接受到的數(shù)據(jù),數(shù)據(jù)的前后順序被打亂了。 請(qǐng)問(wèn)各位大俠,如何設(shè)計(jì)緩沖區(qū),使接受和發(fā)送的數(shù)據(jù),不會(huì)由于有緩沖區(qū)的存在,而是數(shù)據(jù)的順序被打亂? 謝謝 |
| 2樓: | >>參與討論 |
| 作者: kanprin 于 2006/4/4 17:16:00 發(fā)布:
使用環(huán)形的緩沖區(qū)。 如定義一個(gè)a[20],接收時(shí)往緩沖區(qū)寫(xiě)a[i++], 處理時(shí)用另外一指針讀a[j++], 發(fā)送和接收的緩沖區(qū)是分開(kāi)的如定義一個(gè)b[20],發(fā)送數(shù)據(jù)往緩沖區(qū)寫(xiě)b[x++],而由緩沖區(qū)向串口發(fā)數(shù)據(jù)時(shí)讀b[x++],當(dāng)指針i,j,x,y 達(dá)到緩沖區(qū)的最大值時(shí),回到0,從頭開(kāi)始。如果怕數(shù)據(jù)被覆蓋,緩沖區(qū)開(kāi)大些。 不知道這樣行不行? |
|
| 3樓: | >>參與討論 |
| 作者: 真水無(wú)香 于 2006/4/5 13:38:00 發(fā)布:
研究中······ |
|
| 4樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:14:00 發(fā)布:
建議你用“new”一片內(nèi)存緩沖區(qū) |
|
| 5樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 14:15:00 發(fā)布:
好像各種編譯器都支持new這個(gè)方法 |
|
| 6樓: | >>參與討論 |
| 作者: ljxh401 于 2006/4/5 16:28:00 發(fā)布:
FIFO 數(shù)組使用兩個(gè)指針 一個(gè)指向串口的讀數(shù)據(jù)地址 另一個(gè)指向spi的寫(xiě)數(shù)據(jù)地址 這是FIFO嗎 好像是的 以前看書(shū)的感覺(jué) |
|
| 7樓: | >>參與討論 |
| 作者: kanprin 于 2006/4/5 17:22:00 發(fā)布:
就是fifo的概念。 |
|
| 8樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/5 17:26:00 發(fā)布:
除非保證對(duì)指針的訪問(wèn)以及緩沖區(qū)的訪問(wèn)是唯一 |
|
| 9樓: | >>參與討論 |
| 作者: 真水無(wú)香 于 2006/4/7 17:39:00 發(fā)布:
能舉一個(gè)使用new的例子嘛?謝謝 |
|
| 10樓: | >>參與討論 |
| 作者: DEF 于 2006/4/10 0:23:00 發(fā)布:
new 好像只有C++才有啊!C是另外一個(gè)函數(shù)啊! |
|
| 11樓: | >>參與討論 |
| 作者: hanyafeng 于 2006/4/10 8:53:00 發(fā)布:
對(duì) malloc |
|
| 12樓: | >>參與討論 |
| 作者: slickedit 于 2006/4/10 9:35:00 發(fā)布:
最好能互斥 在進(jìn)行緩沖數(shù)據(jù)指針操作的時(shí)候,最好能互斥一下,避免沖突, 同時(shí)在讀寫(xiě)的時(shí)候,也需要加入對(duì)緩沖是否滿和空的判斷,避免 讀寫(xiě)失誤,這樣的例子應(yīng)該有很多的,仔細(xì)琢磨琢磨吧。 |
|
| 13樓: | >>參與討論 |
| 作者: athlon64fx 于 2006/4/10 9:38:00 發(fā)布:
樓主所言極是. 獨(dú)占資源就可以了. |
|
| 14樓: | >>參與討論 |
| 作者: ljxh401 于 2006/4/10 11:40:00 發(fā)布:
只有一個(gè)cpu怎么會(huì)讀寫(xiě)沖突了 哈哈 |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |