snifer

[原创]Blackfin ADSP开发过程中的细节

0
阅读(13375)

前一篇文章中我介绍了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占用量的有效途径;
   减少代码行的方法:
•消除冗余代码可以有效减少代码行数
•通过函数指针和函数表可以减少程序代码规模
以上是我的一些浅见,希望能对大家有所启发,在程序开发过程中,学无止境。