作者wtchen (没有存在感的人)
看板ASM
标题Re: [问题] 比较不易受干扰的平价RF module
时间Tue Dec 20 03:42:19 2016
先解释一下,我现在就是用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://webptt.com/cn.aspx?n=bbs/ASM/M.1482176542.A.685.html
1F:推 WolfLord: 写一个Driver Mod跑RAM就好了啊 12/20 14:52
是说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