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。