如何编写电力实时应用的运行在DSP上的高效C代码

2013-12-12 10:46:22 电力信息化  点击量: 评论 (0)
摘要:数字信号处理器(DSP)因其出色的处理能力,在包括电力应用在内的各个领域得到十分广泛的应用。为了满足电力应用的高实时性的要求,需要为DSP编写高效的代码。目前对DSP进行程序设计时,使用得最多的是C语
了能真正发挥register关键字的作用,在选择被修饰的变量时需要作充分的考虑。
3.2.4循环嵌套问题
循环语句是程序设计中常用的语句,有时候甚至需要嵌套使用。在嵌套时有一个原则,外循环的循环次数尽量少,内循环的循环次数尽量多。因为程序在进入循环的时候需要设置一些寄存器,外循环的次数太多会使得程序多次进入内循环而带来较大的时间开销。例如:
for(m=0;m<10;m++)
{
for(n=0;n<1000;n++)
{
……
}
}
这段代码的执行效率要比下面代码的执行效率高。
for(m=0;m<1000;m++)
{
for(n=0;n<10;n++)
{
……
}
}
3.2.5 减少除法的使用
除法运算无论在浮点DSP还是定点DSP中都是比较复杂的,需要消耗比较多的指令周期【6】。因此需要尽量减少除法的使用,特别是大规模除法的使用。在某些细节上也应该注意用其他更高效的指令来取代除法。
例如,在进行除以2和除以4等除以2的幂次的操作时,用移位的方式来代替。这样做的效果是一样的,但是执行的时间效率却要高很多。在很多对数据进行放大和缩小的操作中,如果缩放的倍数不需要十分精确,也完全可以用移位来代替。
3.2.6 使用查表法
查表法是一种常用的方法,在很多时候牺牲一些数据空间建立一个表,换来的是时间效率的极大提高。查表法在信道编码中的使用尤为常见,例如Viterbi编码。如果不使用查表的方法,Viterbi编码需要通过对移位寄存器中的各个位进行处理,以得到编码的结果。这个过程虽然不是很复杂,但是和查表的方法相比,其时间效率还是非常低的。如果我们建立一个表,表的下标是移位寄存器的状态,用二进制数表示;表的内容是移位寄存器在该状态下时Viterbi编码器所对应的输出。这样就建立了编码移位寄存器状态和Viterbi编码器输出的单射关系。通过移位寄存器的状态来查表,直接得到Viterbi编码器的输出。查表的方法省去了编码的过程,大大提高了代码的时间效率。
在上面提到的减少除法的使用时,我们介绍了一些简单的取代除法运算的其他操作。实际上,查表的方法也是一种可以取代除法运算的方法。除以一个数,等于乘以一个数的倒数。我们可以通过事先建立倒数表的方法,来变除法为乘法。这样的方法对被除数的范围有一定要求,范围不能太大。否则,要么表的规模太大,要么计算精度会下降得比较厉害。但这不失为是一种取代除法运算的很好的方法,合理得建立倒数表可以很好得解决这种存储空间和计算精度的矛盾。
3.2.7 算法的优化
最后要提到的,实际上也最重要的就是算法的优化。精练的算法比粗糙的算法时间效率高很多
大云网官方微信售电那点事儿

责任编辑:和硕涵

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
我要收藏
个赞