全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
浅谈TI公司三大系列DSP编程方法郭林 201221905023摘要:本文以 TI公司的 TMS320C54X为背景详细讨论了 DSP 的汇编语言和 C 语言的混合编程技术 ,提出并分析了在考虑程序代码效率、 执行效率和程序的可读性及可移植性的情况下 ,采用 C 语言和汇编语言混合编程的优点 ,详细阐述了混合编程方法的特点、 应遵循的规则 。关键字:TMS320C54X;汇编语言编程;C语言编程;混合编程;引言:C 语言编程具有开发周期短、 可读性强 ,可移植性好和修改方便等优点 ,但是 C 程序反汇编生成的汇编代码往往较长。直接用汇编语言编程虽然编制的程序较短 ,但是开发周期长 ,修改也不方便。较好的解决方法是程序的框架或主体部分用 C 语言编写 ,对那些耗时多运算密集的模块用汇编语言编写。这种混合编程的方法将 C 语言和汇编语言的优点结合起来 ,既能保证程序的结构化和可读性又能保证应用的实时性。 TMS320C54X的主要特点包括:高运算速度、优化的CPU结构、低功耗方式和智能外设等。使用专用DSP芯片进行设计与开发包括硬件和软件两个方面。通常有以下三种软件设计方式:(1) 完全用C语言开发。TI公司提供了用于C语言开发的CCS(CODE COMPOSER STUDIO)平台。该平台包括了优化ANSI C编译器,从而可以在C源程序级进行开发调方式。这种方式大大提高了软件的开发速度和可读性,方便了软件的修改和移植。但是,在某些情况下,C代码的效率还是无法与手工编写的汇编代码的效率相比,如FFT编程。这是因为即使最佳的C编译器,也无法在所有的飞速下都能够最合理地利用DSP芯片所提供的各种资源。此外,用C语言实现DSP芯片的某些硬件控制也不如汇编程序方便,有些甚至无法用C语言实现(2) 完全有汇编语言开发,TI公司提供了用于汇编语言开发的针对TMS320C54X的汇编语言。用户可以用它进行软件开发。此种方式可以更为合理地充分利用DSP芯片提供的硬件资源,其代码效率高,程序执行速度快。但是用DSP芯片的汇编语言编写程序是比较繁杂的。一般来说,不同公司的芯片汇编语言是不同的,即使是同一公司的芯片,由于片类型的不同(如定点和浮点),芯片的升级换代,其汇编语言也不同。因此,用汇编语言开发基于某种DSP芯片的产品周期较长,并且软件的修改和升级较困难,这些都是因为汇编语言的可读性和可移植性较差所致。(3)用C语言和汇编语言混合编程开发。为了充分利用DSP芯片的资源,更好地发挥C语言和汇编语言进行软件开发的各自的优点,可以将两者有机结合起来,兼顾两者的优点,避免其弊端。因此,在很多情况下,采用混合编程方法能更好地达到设计要求,完成设计功能。但是,采用C语言和汇编语言混合编程必须遵循一些有关的规则,否则会遇到一些意想不到的问题,给开发设计带来许多麻烦。1 TMS320C54X的C语言和汇编语言混合编程方法C语言和汇编语言的混合编程有以下几种方法:(1)独立编写编编程序和C程序,分开编译或汇编形成各自的目标代码模块,用链接器将C模块和汇编模块链接起来,这是一种灵活性较大的方法。采用这种方法,C程序可以调用汇编程序,并且可以访问汇编程序中定义的变量。同样,汇编程序也可以调用C程序或访问C程序中定义的变量。但用户必须自己维护各汇编模块的入口和出口代码,自己计算传递的参数在堆栈中的偏移量,工作量稍大,但能做到对程序的绝对控制。(2)在C程序中直接内嵌汇编语句。此种方法可以在C程序中实现C语言无法实现的一些硬件控制功能,如修改中断控制寄存器、中断标志寄存器等。嵌入汇编语句的方法比较简单,只需在汇编语句的两边加上括号和双引号,并且在括号前加上asm标识符即可,即asm(“汇编语句”)。但是,采用此种方法必须注意以下几点:括号中的汇编语句必须以标号、空格、tab、分号开头,这和通常的汇编编程的语法一样。不要破坏C环境,因为C编译器并不检查和分析嵌入的汇编语句。插入跳转语句和标号会产生不可预测的结果。汇编语句不要改变C程序中变量的值。不要在汇编语句中加入汇编器选项而改变汇编环境。(3)将C程序编译生成相应的汇编程序,手工修改和优化C编译器生成的汇编代码。采用此种方法可以控制C编程器从而产生个有交叉列表的汇编程序,而且程序员可能对其中的汇编语句进行修改。之后,对汇编程序进行汇编可产生目标文件。注意,修改汇编语句时切勿破坏C环境。2混合编程应遵循的规则和详细的接口规范2.1 寄存器规则在C环境中,定义了严格的寄存器规则。寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。调用函数时,被调用函数负责保护某些寄存器,这些寄存器不必由调用者来保护。如果调用者需要使用没有保护的寄存器,则调用者在调用函数前必须予以保护。下面具体说明寄存器规则:(1)辅助寄存器AR1、AR6、AR7由被调用函数保护,即可以在函数执行过程中修改,但在函数返回时必须恢复。在TMS320C54X中,编译器将AR1和AR6用作寄存器变量。其中,AR1被用作第一个寄存器变量,AR6被有作第二个寄存器变量,其顺序不能改变。AR0、AR2、AR3、AR4、AR5可以自由使用,即在函数执行过程中可以修改,而且不必恢复。(2)堆栈指针SP在函数调用时必须予以保护,但其是自动保护的,即在返回时,压入椎栈的内容都将被全部弹出。(3)ARP在函数进入和返回时,必须为0,即当前辅助寄存器为AR0。函数执行时可以是其它值。(4)在缺省的情况下,编译器总是认为OVM为0。因此,若在汇编程序中将OVM置为1,则在返回C环境时,必须将其恢复为0。(5)其它状态位和寄存器在子程序中可以任意使用,不必恢复。2.2 标识符合名规则C编译器将C程序定义的所有标识符前都加一下划线(-)。因此,必须将在C程序中要引用的汇编变量和汇编模块子程序的名字前加上下划线(-)。如果变量仅在汇编模块中使用,则不加下划线(-)的变量名可以任意使用,而不会与C标识符发生冲突。2.3 函数调用规则C编译器规定了一组严格的函数调用规则。除了特殊的运行支持函数外,任何调用C函数或被C函数所调用的函数都必须遵循这些规则,否则就会破坏C环境,造成不可预测的结果。2.3.1 参数传递函数调用前,将参数以逆序压入运行堆栈,即最右边的参数最先入栈,然后自右向左将参数依次入栈。但是,对于TMS320C54X,在函数调用时,第一个参数放入累加器A中进行传递。若参数是长整型和浮点数时,则低位字先压栈,高位字后压栈。若参数中有结构形式,则调用函数给结构分配空间,其地址通过累加器A传递给被调用函数。2.3.2 结果返回函数调用结束后,将返回值置于累加器A中。整数和指针在累加器A的低16位中返回。浮点数和长整型数在累加器A的32位中返回。2.3.3 函数调用时需注意的一些问题参数不是由被调用函数弹出椎栈,而是由调用函数弹出。因此调用函数可以传递任意数目的参数至函数,而且函数不必知道有多少个参数传递。在汇编程序中,除了自动初始化全局变量外,不要将。cinit段用作其它用途。C程序在boot。asm中的启动程序认为。cinit段中放置的全部是初始化表,因此将其它一些信息放入。cinit段将产生不可预料的结果。如果要定义在C程序中访问的汇编变量或调用的汇编子程序,则必须在汇编程序中用。global说明为外部;同样,如果要定义在汇编程序中要调用的C函数或访问变量,也必须在C程序中将其以exterm说明为外部。下面给出具体例子。C程序:Extern int asmfunc ( ); /*声明外部的汇编子程序*/*注意函数名前不要加下划线*/int gvar; /*定义全局变量*/main( )int I=3;I=asmfunc(i); /*进行函数调用*/汇编程序:_asmfunc:;函数名胶一定要有下划线ADD *(-gvar),A ;I的值在累加器A中STL A,*(-gvar);返回结果在累加器A中RETD ;子程序返回3 C语言和汇编语言混合编程软件设计要点和具体设计实例在智能测试仪表的软件设计中,要完成对振动信号进行数据采集,从而进行频谱分析的主要功能。在这个具体实例中,主程序要完成系统的实始化,进行用户操作界面显示,并且进行键值查询,根据按键值决定程序的流程,从而完成仪器设计要求的各项功能。主程序对运行速度和代码效率要求不高,但要求可读性强且修改维护容易,因此采和C语言实现。另外一些子程序如FFT算法,对运行速度要求较高,可用汇编语言实现。而DSP与PC机的通讯与硬件串口有关,采用汇编语言易于实现编程,因此也采用汇编语言钭其做成子程序,而在C语言编写的主程序中调用它。在实际的系统软件设计中,可以根据具体情况来选择将某一模块或某一子程序用C语言或汇编语言来实现,从而更充分地发挥两者的优势,将DSP技术更加充分地利用于各种系统设计中。在此,仅以A/D数据采集为例来具体说明C语言和汇编语言的相互调用问题。由于篇幅有限,仅列出与混合编程及相互调用相关的部分程序以供分析和参考。C程序:Extern void ad1247( ); /*定义外部的汇编函数*/*函数名前不必加下划线*/main( ) /*主程序*/int adlength=2048; /*数据的采样长度*/int adfreq=40; /*数据采样频率*/。汇编程序:。mmregsFP 。set AR7。sect。text。global_ad1247 ;定义汇编子程序,以global说明要被外部的C程序调用,函数名前要有划线。bss len,1 ;定义局部变量len。bss freq,1 ;定义局站变量freq,变量名前不必加下划线。_ad1247 ;程序入口PSHM AR6 ;保护AR6PSHM AR7 ;保护AR6PSHM AR1 ;保护AR1FRAME #-16;为建立的局部帧分配空间函数体STL A,*(len) ;将置于累加器A的第一个参数传给变量lenSSBX CPL ;用SP的直接寻址方式LD 17,A ;第二个参数的偏移地址STL A,*(freq);将置于堆栈中的第二个参数传给变量freq。FRAME #16 ;释放局部帧的空间POPM AR1 ;恢复 AR1POPM AR7 ;恢复 AR7POPM AR6 ;恢复 AR6RET ;返回其中有关函数调用中堆栈的使用和分配,详见图1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025广东韶关市乐昌市九峰镇遑洞村基层公共服务站系统操作员招聘1人参考题库及答案详解(必刷)
- 2026年鹤壁能源化工职业学院单招职业倾向性测试题库附答案
- 2025年辽宁省省直事业单位招聘考试真题试卷 公共基础知识及答案详解1套
- 2026年济南工程职业技术学院单招职业倾向性测试题库含答案
- 2026年江苏城乡建设职业学院单招职业倾向性测试必刷测试卷带答案
- 2026年上海大学单招职业适应性测试必刷测试卷及答案1套
- 2026年贵阳幼儿师范高等专科学校单招职业技能测试必刷测试卷附答案
- 2026年重庆科技大学单招综合素质考试题库及答案1套
- 2025年湖南省事业单位招聘考试模拟试卷 公共某础知识(二)带答案详解
- 2025年通化县事业单位公开招聘工作人员(含专项招聘高校毕业生) (1号)(71人)参考题库带答案详解
- 2024-2025学年六年级上册期中考试语文试卷(江苏卷)
- (人教A版)必修一高一数学上册期中模拟卷01(解析版)
- 铁路工务专业毕业论文
- ZDJ9转辙机及外锁闭安装装置施工工艺工法
- 2025-2026学年教科版(2024)小学科学三年级上册(全册)每课教学反思
- 食品生产企业安全风险管控清单
- 果蔬贮藏与加工技术课件
- 企业风险控制管理办法
- DB43∕T 3020-2024 不动产登记业务规范
- 2025年压力容器设计人员考核试题与答案
- 2025年龙江森林工业集团有限公司所属事业单位招聘考试试题(含答案)
评论
0/150
提交评论