说来惭愧呀。我进来在进行一个项目,需要用到等多的串口。于是“领导”就选了款串口扩展串口的芯片,来扩展串口。我当时也没有考虑就将它设计到了系统中。 后来等到我编写好linux下的驱动程序,并作了简单的测试后。我开始做大流量的周期测试才发现问题。 系统根本来不及处理4路9600bps的子串口数据,而出现数据接收溢出。
这个串口扩展芯片的一个读写操作需要2个字节(W/R_OP),主串口波特率设置为T = 230400bps。而从这个芯片中收/发一个字节数据需要至少6次读写操作,相当于从主串口收/发12字节的数据。于是系统通过串口扩展芯片能处理的最大波特率:B= T /12 = 230400 /12 = 19200bps。 而实际中在uClinux下的中断延迟(t1)和用户中断服务程序中的处理过程(t2)这两个时间,以及中断共享下的耗时(t3)。因此实际处理收/发一个字节的时间: t = t1 + t2 + (n-1)*t3 + 1/B (打开的子串口路数) 实际测试的得到的波特率:14388.5bps。 “领导”要求支持4路子串口1200~9600bps波特率的同时收发。我测试时一直在找是不是程序有问题呀。可苦了我啦。 后来仔细地计算考虑发现是方案的错误。 告诫大家要先考虑方案是否可行,否则“领导”会以为你...,其实错从开始就错了。
|