Re: [問題] 比較不易受干擾的平價RF module
先解釋一下,我現在就是用RPi+Linux Preempt RT
(有時候會切到Xenomai試一下,不過個人感覺似乎不太有必要,Preempt RT夠用了)
※ 引述《MasterChang (我愛ASM)》之銘言:
: 因為對象是linux跟arduino.....
: : UART的問題是比較慢(我指把接收到的訊號傳輸給cpu)
: : 根據規格好像是115200bps?
: 對,uart是比較慢,不過發送資料不用等待全部資料都送出才往下執行程式。
我是用Arduino發送,RPi接收
: : 那如果我傳送個4 bytes的資料至少需要278us
: : 如果buffer裏面還有東西沒傳完搞不好加倍。
: linux是寫到傳送緩衝區,沒記錯buffer size是4k,你也可以修改更大的值
: Arduino是64k,所以發送函式將資料寫到緩衝區就射後不理,除非它滿了。
不管有無buffer,CPU還是必須為了傳送資料而被佔用。
(只有4 byte我想應該用不到DMA)
: : spi的話RPI可以支援8Mb/s(似乎更多),我傳4 bytes大概才4us
: 你要考慮的是RF模組的buffer,因為無線電頻寬才是決定資料能傳多快。
: uart多,除了介面簡單,就是無線頻寬不高,uart足以應付。
我要用RF module做到的是遙控,buffer太大對我來說沒啥幫助。
(當下的指令才有意思)
: : 如果還有real time的要求+CPU的load很緊的時候這就差很多了....
: : 我一個控制週期4ms,I2C就佔掉1ms左右,
: : 如果用在無線傳輸的時間太久我得花更多心力去處理超時問題....
: linux很難做real time,real time至少要保證回應時間,好歹用thread解決這問題。
: 要不就把xenomai移植進來。
目前的經驗,只要不要涉及 file i/o
(因為SD卡會因為wear leveling機制造成有時寫入時間過長)
出來的時間都是算很準,我的要求週期4ms誤差在1ms就ok
(使用Preempt RT誤差不超過0.1ms, Xenomai結果稍差會到0.3ms)
file i/o後來我是多開一個thread解決,不過會因為這樣漏掉一些data
(這無法避免,wear leveling你不用也不行阿)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.190.34
※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1482176542.A.685.html
推
12/20 14:52, , 1F
12/20 14:52, 1F
是說file i/o的部份?也是,
先累積到buffer等滿了再寫入....(我有改過buffer size不過沒啥用)
或是乾脆用linked list把data存入RAM,再依序寫入SD?
有空改看看....
※ 編輯: wtchen (90.41.190.34), 12/20/2016 15:34:45
※ 編輯: wtchen (90.41.190.34), 12/20/2016 15:50:52
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 3 之 5 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章