本帖最后由 zen2017 于 2017-4-2 23:43 编辑 程序是在CUBE生成的USB虚拟串口VCP基础上修改。 在不丢失数据的情况下,传输采集的数据1M字节,花了大约14秒,算下来每秒钟的传输速度大概是72K字节/秒。 想请教一下研究过虚拟串口的XD,这个速度还有提高的余地吗? 其他硬件情况: 1.数据采集。使用外部信号作为定时器源,在中断中进行数据采集。采集一个数据,需要进入中断14次。速度大约是0.03ms采集一个字节,但VCP传输的时候,要传输8字节。 2.还有一个5通道的AD转换,使用AD+DMA,0.1s进行一次AD手动采集。 3.同时还有一个SPI接口的128x64的oled实时显示状态,显示内容全部是8x16的ASCII码字符,所以这个屏幕采用的是虚拟屏幕,内部RAM有一个4x16=64字节的缓冲区,对应显示内容。更新这个屏幕是采用全屏幕重刷方式,使用SPI DMA中断传输显示内容的,我测试过,大约2ms更新一次屏幕内容(SPI采用的是4分频对应是36/4=9MHZ),是在DMA+SPI中断内部,实际消耗CPU的资源很有限,应该不到2ms的10%。 已经充分做了优化,包括采集的数据用FIFO方式存储,VCP传输的时候,直接使用FIFO里面缓冲区指针进行发送,不进行数据搬移。按道理应该和双缓冲区的效果一样。 就是VCP发送,采用的是1ms一次的SOF软中断里面判断是否有数据,如果有数据,则配置好对应的数据指针发送。 |
传送不变的数据速率是:729KB/S
如果每次传送的数据用for循环修改成另一个值,则速度急剧下降为:652KB/S ??!!
同时,这个也说明我使用FIFO进行VCP传输数据管理,速度基本达到了所谓的双缓冲区的效果!
怎么持续收发, 求大神指点