大家好:
我现在明白多核导航接收的大致工作过程:
在接收模式下,PKTDMA从接收完成队列 RxFDQ 中取一个free descriptor(空闲描述符),通过该描述符寻找到链接buffer, 然后把接收端口过来的净荷数据搬移到相应buffer中,最后把指向该描述符的指针push 到接收目的队列RxQ中,完成接收数据包入队的过程。用户要使用接收数据时,从RxQ 中取出描述符,查找到相应接收 buffer 然后读取即可。
现在的问题是,我明白对于当前接收的数据包,可以通过他的描述符找到相应的buffer,但是怎么能获得之前的数据?也就是说之前的接收数据的描述符,是不是在获取当前数据的描述符的时候被释放了?如果被释放了我怎么了才能获取之前接收的数据包?
Allen35065:
RXFDQ和RXQ里的descriptor是循环使用的。
Liangzhan Xie:
回复 Allen35065:
恩恩谢谢你的答复。也就是说接受一个数据包后描述符会被释放。那么我接收的数据是不是也被清空?若被清空,是不是每次都要将接收的数据存放在自己指定的存储空间(比如DDR)。
Allen35065:
回复 Liangzhan Xie:
一般来说,接收数据包进入RXQ之后,CPU会去处理数据,然后把描述符放回RXFDQ,在放入FDQ之前,如果你将来还需要这份数据,那么你就需要把它保存起来。
Liangzhan Xie:
回复 Allen35065:
恩恩,目前我是以符号为单位进行发送与接收的,所以要等收到14个符号(一个子帧才进行处理)。此外,还一个问题,TI给出的AIF_LTE_FDD例程(2000ms的测试数据)发送的包是27720个(前两个帧用于同步,所以(200-2)*20*7=27720),正常接收却是27299个,他们之间查了421个包,这部分数据包去哪了?
Allen35065:
回复 Liangzhan Xie:
我没有跑过你说的例程,不是很确定是不是应该这样,你可以试试先跑一个10ms看看有没有问题。
Liangzhan Xie:
回复 Allen35065:
TI给的AIF_LTE_FDD例程需要2个帧(20ms)进行同步,那么测试的帧数应该至少是三个(30ms),你说的方法我待会试一试(我电脑出现了点问题,正在处理)。下面这个是官方例程的运行结果: