新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > TMS320C6000嵌入式系统优化编程的研究

TMS320C6000嵌入式系统优化编程的研究

作者:时间:2009-03-19来源:网络收藏

  这时可以考虑使用线性汇编语言进行开发。线性汇编语言是中独有的一种语言,介于高级语言和低级语言之间。因为在用手写汇编语言进行应用开发时,开发者除了要精通C6000的指令之外,还必须为指令分配功能单元、考虑指令的延迟和功能单元之间的配合以及合理分配使用32个寄存器,才能写出高效的并行指令,发挥C6000的威力。上面任何一个方面出现问题,都会严重影响算法的效率。

  线性汇编语言的指令和汇编语言的指令完全相同,但是它有自己的汇编器指令系统,用于和汇编器配合使用。与汇编语言的最大区别在于,编写线性汇编语言时不需要考虑指令的延时、寄存器的使用和功能单元的分配,完全可以按照高级语言的方式进行编写。当然由于它不是高级语言,有许多的限制。例如,在循环体时,不能使用跳转到循环体之外的跳转指令;另外计数器只能使用减计数,如果使用加计数,优化器将不能工作等等。但总的说来,它的代码效率远远高于高级语言,而且开发难度和开发周期比汇编语言要小得多。

  在实际开发过程中需要具体情况具体分析,选择一种高效、快捷的开发方法。以下结合应用开发中的几个模块来简述我们使用的优化方法。

2.1 使用汇编语言

  使用汇编语言进行并行难度比较大。但在有些情况下,程序中数据有非常强的承接关系,并且该程序体逻辑关系清楚,使用的寄存器不超过32个,这时直接使用汇编语言实现,效率会更高。另外,有些使用C语言比较难实现的运算函数,在C6000的汇编指令集中可能有专用指令,这时就可以直接使用汇编语言实现。

  使用汇编语言进行编程时特别需要注意的是C6000指令的延迟情况,有些指令并不是立刻就能得到结果。C6000指令集中有延迟的指令如表1所示。

例1 32位归一化函数norm_l()

  short norm_l(long L_var1)

   {short var_out;

   if (L_var1 == 0L) {

   var_out = (short)0;

   }

  else {

     if (L_var1 == (long)0xffffffffL) {

var_out = (short)31;

}

else {

if (L_var1 0L) {

L_var1 = *L_var1;

}

for(var_out=(short)0;L_var1(long)0x40000000L;

var_out++) {

L_var1 = 1L;

}}}

return(var_out);

}

使用汇编语言进行优化:

.global _norm_l

_norm_l:

B B3

CMPEQ 0,A4,B0

[!B0] NORM A4,A4

NOP 3

  消耗时间(时钟周期):C语言norm_l()为723;汇编语言为11。

2.2 使用线性汇编语言重写整个函数

  对于某些以循环体为主的函数可以使用线性汇编语言重写整个函数。使用汇编优化器进行优化之后,效率是非常高的。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭