【原创】在TI C2000定点DSP的快速实现取整函数的一点心得
0赞floor与ceil函数都是C语言的标准库函数,在
在一个用到floor与ceil函数的具体实验中,我采用了TI公司的TMS320F2812定点DSP,采用C语言编程并使用TI公司定点处理智能数学运算(IQmath)。以对Vrab求取floor与ceil值为例,得到以下代码
/*floor and ceil calculation*/
_iq Uab,temp;
Uint16 fab,cab;
if(Uab>=0) {
fab=_IQint(Uab);
temp=_IQfrac(Uab);
cab=(temp||0)+fab;
}
else{
cab=_IQint(Uab);
fab=cab-1;
}
经测试,若采用C语言的标准库函数ceil与floor,计算六次floor与ceil与值需要耗费4118个时钟周期,而改写之后,求取六个值只需要137个周期,大大节省了计算时间;以DSP的时钟周期为例,则执行时间从4118*6.67ns=27.47us,缩短到了137*6.67ns=0.91us,运算速度得到极大的提高。
在此,顺便讲一下CCS中如何计算程序的执行时间:
首先是打开ccs,建立工程,编译程序,解决错误。。。这个过程不多讲,最后自然是下载程序。
其次,在ccs的工具栏中点击Profile---Clock---View,就可以在ccs的左下角看到时钟周期数了。。然后还需要再来一遍Profile---Clock---Enable,则使能了时钟评估这个选项。
其次,在需要被测试的程序两端加入断点,然后运行程序。。程序运行到第一个端点停止后,双击一下右下角的计数值,则它就能清零了。然后再运行一下程序,此时程序运行到第二个端点停止,这时的右下角的数值就是执行这段程序所用的时钟周期数。当然,考虑上插入断点所带来的处理器开销,实际的执行时钟周期要稍微小于所显示的值。