这几天用TI DSP5402做项目,之前都用5409,程序空间少了一半,程序写完后在ccs上跑的时候老报空间不足,因此用了很多的精力和时间对程序进行优化,特征是不能减的了,能优化的就是代码空间,以下是一些小结:
1.添加string.h、math.h等外接库会增加很多代码,所以对于memset,sqrt等考虑自己写。
今天找到的一个挺好用的sqrt实现算法,据说比一般编译器默认的要优化好几倍:
float sqrt(float number) {
long i;
float x, y;
const float f = 1.5F;
x = number * 0.5F;
y = number;
i = * ( long * ) &y;
i = 0x5f3759df - ( i >> 1 );
y = * ( float * ) &i;
y = y * ( f - ( x * y * y ) );
y = y * ( f - ( x * y * y ) );
return (number * y);
}
还一个fabs:
float fabs( float f ) {
int tmp = * ( int * ) &f;
tmp &= 0x7FFFFFFF;
return * ( float * ) &tmp;
}
在pc上做仿真,运行效果与库函数无异,但是到了DSP则出现计算结果不一致的情况,追踪的结果是上面这个fabs出了问题,
然后换成 float fabs( float f ) return ((f)>0?(f):-(f)); 这样的效果就一样了,原因不详……不过后面的函数的汇编
代码比前面的多,原因可能是判断比上面移位和指针操作更占汇编代码。还有#define和inline,根据其特性,程序空间的
累加很明显。
2

在使用TI DSP5402进行项目开发时,由于程序空间限制,进行了深度优化工作。避免引入string.h和math.h等库,转而自定义实现如memset和sqrt等函数,以减少代码占用空间。分享了一个高效的平方根算法实现,表示其优化效果显著优于编译器默认版本。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



