TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320C6678: EDMA ping-pang处理数据问题

Part Number:TMS320C6678

程序基本思路:①EDMA触发ping向内核搬数据;②轮询IPR,ping搬数据结束后,触发pong向内核搬数据同时处理ping的数据(矩阵相乘;③轮询IPR,pong搬数据结束后,触发ping向内核搬数据同时处理pong的数据(矩阵相乘;④如上交替执行。

问题:为方便观察,所以在EDMA程序中加入printf语句观察执行情况,在有printf语句输出的情况下,数据处理后输出结果是对的;但是!!!如何把printf语句注释掉,输出结果就错了。这是什么原因呢?望有经验的人能够解答。

Shine:

这个问题比较奇怪,一般都是加了printf会不正常。如果不做任何算法处理,只是用edma来搬移ping pong数据,可以吗?看一下是不是和算法有关。或者试着加大堆栈大小。

,

jianxin wang jianxin wang:

我调整了语句顺序,现在的情况是有printf时消耗时间为10ms,注释掉printf消耗的时间为22ms,为什么消耗时间变长了呢?(因为要考虑实时性所以计算时间)

,

Shine:

请问您是怎么计算耗时的?用TSCH, TSCL?

,

jianxin wang jianxin wang:

是的,用TSCH, TSCL。

,

Shine:

如果不做任何算法处理,只是用edma来搬移ping pong数据,可以吗?

,

jianxin wang jianxin wang:

做了一个简单的测试,利用EDMAping pong将数据从共享内存搬到L2,再利用EDMApingpong将数据从L2搬到共享内存,结果正确,可以看到有printf输出是要比无printf输出消耗时间要长的,这是符合一般逻辑的吧?(printf消耗时钟周期么?)

但是我的算法处理语句只有一条矩阵相乘,为什么这样就有问题了呢?部分代码如下,只是在中间加了一条矩阵相乘语句。

/*Trigger PONG*/ CSL_edma3HwChannelControl(hChannel,CSL_EDMA3_CMD_CHANNEL_SET,NULL); //ping数据降维 DSPF_sp_mat_mul_cplx((float*)Ts,a+1,channel_num,(float*)dstBuff1,(range_num+1), (float*)ping_out); //触发pingout CSL_edma3HwChannelControl(hChannel1, CSL_EDMA3_CMD_CHANNEL_SET,NULL);

,

Shine:

printf会比较耗时。您尝试用优化选-O3。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6678: EDMA ping-pang处理数据问题
分享到: 更多 (0)