我在6678上编了一个波束形成cbf的程序,其中cbf主要算法编到了函数execute_cbf中,然后用其他公司提供的时间获取函数测其运行的时间,函数编写如下,发现了一个问题。
现象1:当函数编写按照第一种execute_cbf来时,测出的时间是500ms,如果按照第二种函数来时,测出的时间是950ms。。。。可是这两个函数的唯一区别就是fft_srio是直接赋值还是通过函数传参赋值,实在是想不到为什么?
现象2:当我在函数声明、函数定义、函数调用中将第一个参数,即address_srio删去,然后,fft_srio直接赋值为0xA6000000时,时间消耗时950ms。
static OS_PROCESS(cbf_dsp2)
{
/**************省去*************/
time_begin = C6678_Timer8_SystemTime_Get();
execute_cbf(0xA6000000, cbf_data, gengxin);
time_end = C6678_Timer8_SystemTime_Get();
printf("time: %lfms\n",(double)(time_end-time_begin)/1000/1000);
}
第一种:
void execute_cbf(unsigned int address_srio, double * signal_out, unsigned int gengxin)
{
/*********省去一些变量定义**********/
double * fft_srio = address_srio;
/*********省去一些变量定义**********/
/*********将fft_srio处数据copy出来进行cbf计算**********/
/*********省去一些数据处理过程**********/
}
第二种:
void execute_cbf(unsigned int address_srio, double * signal_out, unsigned int gengxin)
{
/*********省去一些变量定义**********/
double * fft_srio = 0xA6000000;
/*********省去一些变量定义**********/
/*********将fft_srio处数据copy出来进行cbf计算**********/
/*********省去一些数据处理过程**********/
}
此程序是在6678上的一个核运行的,使用Enea操作系统,软件版本是5.1。希望TI能够有人帮我看看,这个到底是哪里的问题。
Allen35065:
这个看不出来有什么错误,你可以在子程序里加上TSCL来统计cycle看看具体是什么环节增加了cycle;
我猜这两种汇编出来的结果应该是不一样的,可能会影响到执行效率。