原创 LM3S 以太网转串口 速度瓶颈 开发小结

2011-4-2 13:42 3861 11 12 分类: MCU/ 嵌入式

一、当串口高速度3.125Mbps全速运行时,以太网读取FIFO发送的时间大于串口写入FIFO的时间时,出现丢包现象。

解决方案:(1)主机每10ms调用一次,Telnet每字发送时间约4.5-5uS;256*7所用时间约8.96mS。故采用固定长度帧发送。首先判断FIFO已用的长度,若大于256*7,按256*7读取;若小于256*7,按较小的值读取发送。这样Telnet的发送时间便被控制下来。

    接下来中要的是,FIFO总存储空间-已读取的+写入的;防止FIFO溢出丢数据。按照3.125Mbps来计算,接收一个字为3.2uS,10mS内共接收3125字节。缓冲的FIFO空间要足够,才能保证数据不丢失。此种方案对SRAM占用较多。

(2)提高主机时间间隔,以5mS为例,固定发送长度256*4=1024;按照3.125Mbps来计算,接收一个字为3.2uS,5mS内共接收1563字节。这样对于SRAM的压力减轻。

Telnet发送:

           long lCount, lIndex,SendLength;

            lCount = (long)SerialReceiveAvailable(pState->ulSerialPort);
           
            if(tcp_sndbuf(pState->pConnectPCB) < lCount)
            {
                lCount = tcp_sndbuf(pState->pConnectPCB);
            }
           
            if(lCount >256*7)
            {
              SendLength = 256*7;
            }
            else
            {
              SendLength = SendLength;
            }
            //
            // While we have data remaining to process, continue in this
            // loop.
            //SendLength
            while((SendLength) &&
                  (pState->pConnectPCB->snd_queuelen < TCP_SND_QUEUELEN))
            {
                //
                // First, reset the index into the local buffer.
                //
                lIndex = 0;

                //
                // Fill the local buffer with data while there is data
                // and/or space remaining.
                //
                while(SendLength && (lIndex < sizeof(pucTemp)))
                {
                    pucTemp[lIndex] = SerialReceive(pState->ulSerialPort);
                    lIndex++;
                    SendLength--;
                }

                //
                // Write the local buffer into the TCP buffer.
                //
                tcp_write(pState->pConnectPCB, pucTemp, lIndex, 1);
            }

总结:数据更新索引时,关闭了所有中断,不合理。影响网速,丢包。关闭后,正常,网速提升。串口高速3.125MBPS全速。

文章评论1条评论)

登录后参与讨论

用户377235 2014-12-26 10:41

这是用ARM实现的,3M的串口速率?在市面上看到的产品基本上都是230K,最大也才920K,你咋能做到这么高?
相关推荐阅读
用户404775 2011-11-30 11:43
DC-AC逆变正弦案例,SPWM,0-2000Hz连续可调,正弦波
  1 概述 DC-AC,实现直流信号转换成频率可调的正弦信号,以5VDC转正负峰峰值2.5V,频率最高2.5KHz正弦波信号为例。频率0Hz-2.5KHz连续可调。   2 MA...
用户404775 2011-11-25 10:44
LM3S9792 C5Version下载程序Fatal error: There were warnings during download of FLASH
LM3S9792 C5Version下载程序Fatal error: There were warnings during download of FLASH loader, see Log Wi...
用户404775 2011-08-02 10:51
PADS Layout 布局 Reuse 的使用
PADS 设计的思想,PADS Logic与Layout 交互使用,模块化设计。 一、在Layout布局时,先完成一个模块的布局,选中,Make Reuse,保存。 二、选中Reuse,右键,选择 M...
用户404775 2011-07-20 13:30
论坛+网址
(1)射频器件 http://china.skyworksinc.com/ 论坛 (1)http://bbs.rfeda.cn/ 微波仿真 (2)http://rf.eefocus.com/ RF 技...
用户404775 2011-07-13 22:41
MATLAB 绘制函数曲线图
(1)y=1/x: n=0:10:1000; y=1./n; plot(n,y) grid on (2)y=x*x: n=-1000:10:1000; y=n.*n; plot(n,y...
用户404775 2011-07-04 08:53
安规测试问题整理 (转)
Q:何谓Ⅰ类产品与Ⅱ类产品?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> A:...
我要评论
1
11
关闭 站长推荐上一条 /2 下一条