dsp程序中for循环单步执行与全速执行的区别
时间:10-02
整理:3721RD
点击:
各位大神,最近在做dsp通过68013与pc机进行数据通信的项目!遇到一个很奇怪的问题,跟各位请教一下。
首先我采用的是68013的异步slave fifo的模式。使用BULK传输。fifo缓冲区设定大小为512*4,固件程序中自动处理数据包的长度为512.
68013的异步slave fifo传输模式的逻辑控制是用cpld和dsp共同控制的,cpld中控制读写信号,控制输出使能信号SLOE,控制片选信号CS;DSP程序中控制地址FIFO_ADR0/ADR1,并读取FIFO_FLAGB/FIFO_FLAGC标志位。整个逻辑控制都实现好了!通信也正常,数据收发都很正常。
但是在测试68013通信速度时,出现了问题!我用ccs中profile->clock->view时钟周期计算时间,然后根据发送的字节数计算速度。
现在我就发送512字节,用for循环赋值。
void Dsp_PC(char* buf,int len)
{
int i,k;
if(0==GPIO_Input_Read(pin_FLAGB))
{
while(1)
{
if(1==GPIO_Input_Read(pin_FLAGB))
{
break;
}
}
}
if(1==GPIO_Input_Read(pin_FLAGB))
{
GPIO_Output_Config(pin_ADR1,1);
GPIO_Output_Config(pin_ADR0,0);
for(i=0;i 设置断点 *(unsigned char*)USB_68013CS=buf[i];
}
}
return ;
}
main()
{
、、、、、一系列的初始化、、、
-->设置断点 asm(" NOP ");
for(i=0;i 设置断点 Dsp_PC(buf,512); //buf是我自己定义的一个数据,里面存放我发送的数据,512是发送的字节数
}
-->设置断点 asm(" NOP ");
}
现在如果在我标注的地方设置断点,那么就是单步执行Dsp_PC中发送的数据,在全部发送完512字节后,用的时钟周期是12000左右,但是如果我只在main函数中的两个空语句asm(" NOP ");处加断点,那么是for循环自行发送512字节,这时的时钟周期是37000,两者差别30倍左右!
请教各位。谁知道这问题在哪?首先这两种方法外部因素全部一样 。 在线等、、
首先我采用的是68013的异步slave fifo的模式。使用BULK传输。fifo缓冲区设定大小为512*4,固件程序中自动处理数据包的长度为512.
68013的异步slave fifo传输模式的逻辑控制是用cpld和dsp共同控制的,cpld中控制读写信号,控制输出使能信号SLOE,控制片选信号CS;DSP程序中控制地址FIFO_ADR0/ADR1,并读取FIFO_FLAGB/FIFO_FLAGC标志位。整个逻辑控制都实现好了!通信也正常,数据收发都很正常。
但是在测试68013通信速度时,出现了问题!我用ccs中profile->clock->view时钟周期计算时间,然后根据发送的字节数计算速度。
现在我就发送512字节,用for循环赋值。
void Dsp_PC(char* buf,int len)
{
int i,k;
if(0==GPIO_Input_Read(pin_FLAGB))
{
while(1)
{
if(1==GPIO_Input_Read(pin_FLAGB))
{
break;
}
}
}
if(1==GPIO_Input_Read(pin_FLAGB))
{
GPIO_Output_Config(pin_ADR1,1);
GPIO_Output_Config(pin_ADR0,0);
for(i=0;i 设置断点 *(unsigned char*)USB_68013CS=buf[i];
}
}
return ;
}
main()
{
、、、、、一系列的初始化、、、
-->设置断点 asm(" NOP ");
for(i=0;i 设置断点 Dsp_PC(buf,512); //buf是我自己定义的一个数据,里面存放我发送的数据,512是发送的字节数
}
-->设置断点 asm(" NOP ");
}
现在如果在我标注的地方设置断点,那么就是单步执行Dsp_PC中发送的数据,在全部发送完512字节后,用的时钟周期是12000左右,但是如果我只在main函数中的两个空语句asm(" NOP ");处加断点,那么是for循环自行发送512字节,这时的时钟周期是37000,两者差别30倍左右!
请教各位。谁知道这问题在哪?首先这两种方法外部因素全部一样 。 在线等、、
没有人遇到过这种情况吗?各位牛人。帮忙分析下
main()
{
、、、、、一系列的初始化、、、
-->设置断点 asm(" NOP ");
// for(i=0;i 设置断点 asm(" NOP ");
}
这样子,测试过吗?
两者差别30倍,搞定了吗?我也遇到了