[原创]Blackfin ADSP开发过程中的细节
0赞
发表于 7/1/2012 3:25:31 PM
阅读(13272)
前一篇文章中我介绍了Blackfin ADSP开发过程中的一点心得,得到了小小博士同学的点评,非常感谢,针对第二个程序,今天终于想透彻了,写出来与大家分享。
问题:有一组处理函数:functionA, functionB,…functionZ,它们的函数形式如下
int functionA(int event);
int functionB(int event);
…….
int functionZ(int event);
他们分别是不同状态(A,B…,Z)的处理。编写这段处理代码,我们该如何做?
下面代码可行吗?
switch (status) {
case A: functionA(event)
break;
case B: functionB(event)
break;
……
case Z: functionZ(event)
break;
}
可行!但是不好!原因是生成目标代码大,而且可维护弱一些。
这么做可以解决上面提到的缺点
typdef int (*pFunc)(int event);
typedef enum { A =0,
B,
…
Z
} Status_t;
pFunc functionlist[Z] ={ functionA,
functionB,
…
functionZ
};
Status_t status;
……
status被赋值
……
functionlist[status](event);
这么做是不是更好?
对此我在Blackfin ADSP开发过程中得出以下几点心得:
–冗余数据压缩,可以减少对内存的占用
如有些矩阵数据的存储。有些矩阵中的非零元素很少,可以考虑通过只存储非零数据来减少对存储空间的占用。
–动态内存使用的方式,可以提高内存的利用率。
追求空间的效率和追求时间的效率,往往是矛盾的,需要全面权衡。
–减少代码的行数可以减少ROM的占用
对于嵌入系统而言,ROM资源是很宝贵的。减少代码行数是减少ROM占用量的有效途径;
减少代码行的方法:
•消除冗余代码可以有效减少代码行数
•通过函数指针和函数表可以减少程序代码规模
以上是我的一些浅见,希望能对大家有所启发,在程序开发过程中,学无止境。