情况是这样子的,我在应用层做了两个线程,一个是以太网的接收线程,一个是gpmc给fpga发送的线程,创建有两块缓存bufferA和bufferB。
工作方式是这样的,首先以太网接收数据,往bufferA和bufferB里面填充数据,当填充满之后,便不再填充数据了。外部gpio口检测拉低信号,然后gpmc往外发送buffer中数据,一次发送8k左右的数据,首先是bufferA的,然后是bufferB的,当bufferA发送完之后,接收的线程就往bufferA里面去填充数据。类似于乒乓模式一样。
我实测的时候 网口单独工作 可以达到8M/s,gpmc可以达到10M/s,但是量两个协调工作时,网口的就只能达到2~5M/s了。
然后,我讲两个线程分开,就是一个线程独立网口只接收,一个线程独立gpmc只发送,开两个线程,这样网速还是之后2~5M/s,是不是 两个开启之后 cpu的资源分配不过来了?是不是GPMC里面我要用到EDMA来搬运数据?请问有么有GPMC和EDMA结合使用的资料?我用的是AM3358这款芯片
Jian Zhou:
这个还是与你的进程间通信机制有关系,如果想达到最优速度,GPMC和以太网使用ping pang buffer是不能有停顿的。