返回首页
当前位置: 主页>开发编程语言>

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

时间:2017-06-24 07:52来源:网络整理 作者:USB开发频道 点击:

  

  众所周知,汇编语言具有更高的性能优势,而用C语言编码则能更容易和快速地实现。DSP处理器功能的不断增强以及编译器优化技术的提高,使得传统的用汇编语言编写DSP应用程序的做法逐渐被淘汰。现在的DSP应用程序几乎都是由C代码和汇编代码混合组成的。在那些对性能起决定性作用的关键功能中,DSP工程师将继续使用高度优化的汇编代码,同时转用C语言编写那些不太关键的功能,这将有利于代码维护和移植。而C和汇编代码的这种结合要求DSP工程师具备专门的工具和方法。 织梦好,好织梦

  正确混合C代码和汇编代码 copyright dedecms

  问题是在哪里划分C代码和汇编代码的界限。这取决于跟踪器(profiler)所能提供的性能分析结果。然而在使用跟踪器之前,DSP工程师需要为应用程序定义清晰的目标,这些目标一般包括循环数、代码规模和数据量。目标一旦确定后,应该先全部用C语言编写和创建应用程序,然后才使用跟踪器来分析性能。

本文来自织梦

  在某些特定情况下,主要是控制应用中,C语言级的编码就足够了。但在大多数情况下,初始编写的C语言应用程序是不能满足一个或更多目标要求的。这通常意味着多少需要一些汇编代码。在求助于汇编编程之前,强烈建议保存原始的C代码。这样不仅方便调试,而且当条件成熟(比如采用更强大的平台),还可以返回到这些C语言的实现。 织梦内容管理系统

  汇编部分代码应尽可能少。为此,工程师需要认真分析跟踪器提供的性能结果,并确定应用程序中的关键函数。关键函数是指占用大部分执行时间,而必须用汇编语言重写才能满足性能目标的那些函数。重写其中的几个关键函数后,需要重新进行性能分析。如果仍达不到目标要求,那就应该确定其它关键函数,再进行重写。图1显示了利用专用硬件机制获得高度优化的汇编代码。 织梦内容管理系统

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

织梦内容管理系统

copyright dedecms


织梦内容管理系统

  图1:用C语言创建的循环缓冲器代码(左)以及由CEVA-TeakLite-III创建的等效汇编代码(右)。

copyright dedecms

  对编译器的考虑事项 内容来自dedecms

  在编写需要与C代码结合的汇编代码时,汇编编程人员必须了解编译器的约定和假设。汇编编程人员还必须了解编译器的寄存器使用约定。通常,寄存器使用约定将硬件寄存器分成被调用方保存(或调用方使用)和被调用方使用(或调用方保存)寄存器。

copyright dedecms

  图2给出了从CEVA-X1641 DSP内核FFT实现中摘取的汇编代码例子。左边第二行的add指令符合CEVA-X1641编译器传递r0地址寄存器中指针参数的调用约定。右边的pushd指令用于备份后面函数会用到的被调用方保存寄存器。 dedecms.com

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

织梦好,好织梦

内容来自dedecms


copyright dedecms

  图2:从CEVA-X1641 DSP内核的FFT实现中摘取的一段汇编代码。 dedecms.com

  除了调用约定和寄存器使用约定外,一些编译器在人工编写的汇编代码方面可能还会有一些额外的假设。这些假设通常是专门针对某个编译器的,因此编译器提供商会提供完善的资料和说明。

内容来自dedecms

  用于C和汇编连接的常用C语言扩展 本文来自织梦

  用于嵌入式平台的大多数编译器,特别是用于DSP编程的编译器,都具有丰富的C语言和汇编语言连接功能。其中绝大部分功能不属于标准C语言,因此被称为C语言扩展。下面列出的是其中有益于DSP编程的一些功能。

本文来自织梦

  内联汇编(inline assembly):该功能可以帮助编程人员将汇编指令插入C代码。

内容来自dedecms

  硬件寄存器绑定C变量:该功能经常与汇编指令内联功能结合在一起,帮助内联汇编代码访问C语言级的变量(见图3)。 copyright dedecms

如何利用C和汇编语言混合编程实现DSP软件设计 内容来自dedecms

copyright dedecms


织梦好,好织梦

  图3:结合内联汇编和硬件寄存器绑定功能的代码示例。

内容来自dedecms

  存储区属性:该功能允许编程人员将上述变量和函数分配到独特的用户定义存储区,可以让编程人员将C语言级单元分配到实际的存储器位置,这对DSP应用来说非常关键。 内容来自dedecms

  用户定义的调用约定:在某些情况下,汇编函数可以通过用户定义的调用约定取得更好的优化效果。

copyright dedecms

  编译器内部函数(Compiler intrinsics):是指能够使用专门的宏或函数调用触发的内建编译器功能总称。没有内部函数支持的编译器必须调用用户定义的函数,这样做可能会令用户定义函数可能会在一个环路里产生函数调用和返回(见图4),从而产生巨大的开销。 dedecms.com

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

dedecms.com

dedecms.com


织梦好,好织梦

  图4:ETSI的mult_r(乘法和取整)基本操作的C代码实现(左)和对应的由CEVA-TeakLite-III编译器生成的汇编代码(右)。

织梦好,好织梦

  汇编内部函数:是将汇编代码内联进C代码的一种先进方法,下文将有详细介绍。 内容来自dedecms

  把汇编指令当作C语句一样来编写

copyright dedecms

  内联汇编功能具有显著的缺点。它会破坏各种编译器优化操作,因为编译器不了解内联代码的内容,会使用最坏假设;以及它可能迫使编程人员处理底层问题,如寄存器分配和指令调度。 本文来自织梦

  汇编内部函数可以帮助编程人员实现内联汇编代码,并且不存在这些缺点。从编程人员的角度看,汇编内部函数就像是C语言宏或函数。它们接收C语言变量,返回C语言输出结果,同时表现为单个汇编指令。由于涉及该功能的所有代码都在C语言等级,因此编程人员不必担心寄存器分配、指令调度和其它底层问题。汇编内部函数不仅不会妨碍编译器优化操作,还会参与优化过程,就像它们是编译器正常产生的汇编指令一样。这些特征使得汇编内部函数的功能非常强大。 dedecms.com

  利用汇编内部函数,编程人员可以从编译器不可能产生的独特汇编指令中受益。例如,CEVA-X1641的bitrev(位反向)指令就是为FFT等算法定制的。由于编译器不太可能把一个程序看作一个FFT并使用bitrev指令,因此编程人员可以完全把bitrev汇编内部功能嵌入到C代码中。结合对应用的透彻了解,编程人员还可以使用C应用程序的性能决定段里的精确序列汇编内部函数,从而能够确保编译器生成的代码效率就像手工编写的一样高。

内容来自dedecms

  图5是CEVA-X1641编译器与汇编内部函数一起使用的例子。汇编内部函数还受益于由CEVA-X1641编译器处理的问题所决定的机器,如寄存器分配、指令调度和硬件单元分配。

织梦好,好织梦

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

dedecms.com

内容来自dedecms


本文来自织梦

  图5:CEVA-X1641编译器支持的汇编内部函数的使用。 内容来自dedecms

  调试混合代码的应用程序

织梦内容管理系统

  汇编代码的调试需要对延迟和存储器对齐限制等架构和机器级问题有深入的了解。只是简单地把C代码和汇编代码放在一起会使事情更麻烦,因为编程人员现在还必须调试C代码和汇编代码之间的连接。

dedecms.com






秦华 『上海买保险』上海地区人寿保险资深寿险顾问 上海外籍人士买保险-高端人士医疗办理
服务项目:儿童医疗/子女教育金/养老保险/重大疾病/意外伤害/员工团险/公众责任
免费热线『上海』:13761630213, QQ:107242375, Email:victor.qin@qq.com
选择保险事业 为了爱,为了一份坚定的承诺!MSN:
上海地区请直接拨打本人电话,应约免费上门提供免费保险方案。
Baoxian.ws>>           旅行签证保险、上门办理>>        重大疾病网>>     上海重大疾病一览    
友情链接: 走在上海人寿保险的前端    和讯保险博客    上海投保在线    Shanghai Insurance    秦华的个人简历


顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
图文并茂 我的链接
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
上海高端医疗/住院医疗保险信息
上海保险规划师信息
上海子女教育理财保险信息
上海保险规划师信息
上海女性高端生育保险方案-等待期
上海保险规划师信息
上海三口之家家庭保障方案
上海保险规划师信息
上海女性特色重大疾病保险方案
上海保险规划师信息
上海女性白领理财保险方案
上海保险规划师信息
上海养老理财规划保险方案
上海保险规划师信息
通过网络取得初步咨询
  •    
上海办理-免费咨询送计划书
上海买保险
上海办理-申根签证 出国旅行保险
上海买保险
上海买保险,海外基金,买保险,友邦保险,中国人民健康保险,养老保险,儿童保险,儿童医疗,子女教育金,太平洋保险,医疗保险,工伤保险条例,中国人寿保险,保险公司,中国平安保险,医疗险,进口药,自费药,外籍人士医疗,泰康人寿,英国保诚集团,上海综合保险,国际医疗保险,上海医疗保险,上海社会保险,上海养老保险,上海市综合保险,上海平安保险,上海太平洋保险,和睦家医院,上海综合保险卡,买保险,高端医疗,重大疾病,意外伤害,定期寿险,家庭理财,友邦保险,金茂大厦,少儿互助基金,上海社保,太平洋集团,港安医院