如何利用c和汇编语言混合编程实现dsp软件设计

如何利用c和汇编语言混合编程实现dsp软件设计

ID:35939810

大小:163.00 KB

页数:10页

时间:2019-04-26

如何利用c和汇编语言混合编程实现dsp软件设计_第1页
如何利用c和汇编语言混合编程实现dsp软件设计_第2页
如何利用c和汇编语言混合编程实现dsp软件设计_第3页
如何利用c和汇编语言混合编程实现dsp软件设计_第4页
如何利用c和汇编语言混合编程实现dsp软件设计_第5页
资源描述:

《如何利用c和汇编语言混合编程实现dsp软件设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、如何利用C和汇编语言混合编程实现DSP软件设计内容摘要:除了调用约定和寄存器使用约定外,一些编译器在人工编写的汇编代码方面可能还会有一些额外的假设。硬件寄存器绑定C变量:该功能经常与汇编指令内联功能结合在一起,帮助内联汇编代码访问C语言级的变量(见图3)。关键词:编程人员指令调度寄存器分配汇编语言ARM-NBpushd实现方案和函数DSP应用DSP处理器众所周知,汇编语言具有更高的性能优势,而用C语言编码则能更容易和快速地实现。DSP处理器功能的不断增强以及编译器优化技术的提高,使得传统的用汇编语言编写DSP应用程序的做法逐渐被淘汰。现在的DSP应用程序几乎都是由C代码和

2、汇编代码混合组成的。在那些对性能起决定性作用的关键功能中,DSP工程师将继续使用高度优化的汇编代码,同时转用C语言编写那些不太关键的功能,这将有利于代码维护和移植。而C和汇编代码的这种结合要求DSP工程师具备专门的工具和方法。正确混合C代码和汇编代码问题是在哪里划分C代码和汇编代码的界限。这取决于跟踪器(profiler)所能提供的性能分析结果。然而在使用跟踪器之前,DSP工程师需要为应用程序定义清晰的目标,这些目标一般包括循环数、代码规模和数据量。目标一旦确定后,应该先全部用C语言编写和创建应用程序,然后才使用跟踪器来分析性能。在某些特定情况下,主要是控制应用中,C语言

3、级的编码就足够了。但在大多数情况下,初始编写的C语言应用程序是不能满足一个或更多目标要求的。这通常意味着多少需要一些汇编代码。在求助于汇编编程之前,强烈建议保存原始的C代码。这样不仅方便调试,而且当条件成熟(比如采用更强大的平台),还可以返回到这些C语言的实现。汇编部分代码应尽可能少。为此,工程师需要认真分析跟踪器提供的性能结果,并确定应用程序中的关键函数。关键函数是指占用大部分执行时间,而必须用汇编语言重写才能满足性能目标的那些函数。重写其中的几个关键函数后,需要重新进行性能分析。如果仍达不到目标要求,那就应该确定其它关键函数,再进行重写。图1显示了利用专用硬件机制获得

4、高度优化的汇编代码。图1:用C语言创建的循环缓冲器代码(左)以及由CEVA-TeakLite-III创建的等效汇编代码(右)。对编译器的考虑事项在编写需要与C代码结合的汇编代码时,汇编编程人员必须了解编译器的约定和假设。汇编编程人员还必须了解编译器的寄存器使用约定。通常,寄存器使用约定将硬件寄存器分成被调用方保存(或调用方使用)和被调用方使用(或调用方保存)寄存器。图2给出了从CEVA-X1641DSP内核FFT实现中摘取的汇编代码例子。左边第二行的add指令符合CEVA-X1641编译器传递r0地址寄存器中指针参数的调用约定。右边的pushd指令用于备份后面函数会用到的

5、被调用方保存寄存器。图2:从CEVA-X1641DSP内核的FFT实现中摘取的一段汇编代码。除了调用约定和寄存器使用约定外,一些编译器在人工编写的汇编代码方面可能还会有一些额外的假设。这些假设通常是专门针对某个编译器的,因此编译器提供商会提供完善的资料和说明。用于C和汇编连接的常用C语言扩展用于嵌入式平台的大多数编译器,特别是用于DSP编程的编译器,都具有丰富的C语言和汇编语言连接功能。其中绝大部分功能不属于标准C语言,因此被称为C语言扩展。下面列出的是其中有益于DSP编程的一些功能。内联汇编(inlineassembly):该功能可以帮助编程人员将汇编指令插入C代码。硬

6、件寄存器绑定C变量:该功能经常与汇编指令内联功能结合在一起,帮助内联汇编代码访问C语言级的变量(见图3)。图3:结合内联汇编和硬件寄存器绑定功能的代码示例。存储区属性:该功能允许编程人员将上述变量和函数分配到独特的用户定义存储区,可以让编程人员将C语言级单元分配到实际的存储器位置,这对DSP应用来说非常关键。用户定义的调用约定:在某些情况下,汇编函数可以通过用户定义的调用约定取得更好的优化效果。编译器内部函数(Compilerintrinsics):是指能够使用专门的宏或函数调用触发的内建编译器功能总称。没有内部函数支持的编译器必须调用用户定义的函数,这样做可能会令用户定

7、义函数可能会在一个环路里产生函数调用和返回(见图4),从而产生巨大的开销。ETSI的MULT_R(乘法和取整)基本操作的C代码实现(左)和对应的由CEVA-TEAKLITE-III编译器生成的汇编代码(右)。i]M*lN'4z9@ydb0sZMTx!j?K=z@?rB.v2人力资源论文=dgffN51!;eZ/=W.P1Sv$,U1M汇编内部函数:是将汇编代码内联进C代码的一种先进方法,下文将有详细介绍。把汇编指令当作C语句一样来编写内联汇编功能具有显著的缺点。它会破坏各种编译器优化操作,因为编译器不了

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。