一种TI 5000系列DSP CC++语言和汇编语言混合编程的方法.doc

一种TI 5000系列DSP CC++语言和汇编语言混合编程的方法.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种TI5000系列DSPCC语言和汇编语言混合编程的方法

摘 要:首先介绍并比较了 TI 5000 系列DSP的三种主要软件开发方法的优缺点,提出了C/C++与汇编语言混合编程方法的优越性所在。之后在比较了几种典型混合编程方法的基础上,提出了一种结构化的混合编程方法并详细阐述了其函数调用规则和寄存器规则。最后给出了一个经过验证的混合编程程序,该程序对DSP软件开发有较大参考价值。   关键词:DSP;混合编程;函数调用规则;寄存器规则 1引言   TI 公司的5000系列低功耗16 b定点DSP,因其良好的性价比,在国内获得了很大的普及。如何对5000系列DSP进行软件开发也一直是业界关注的热点。5000系列DSP的软件设计通常有3种方法。 1.1用C/C++语言开发   TI公司提供了用于C/C++语言开发的CCS平台。该平台包括优化ANSI C/C++ 编译器,从而可以在源程序级进行开发调试。这种方法大大提高了软件的开发速度和可读性,方便了软件的修改和移植。但是,C/C++代码的效率还是无法与手工编写的汇编代码效率相比,如FFT程序。因为即使是最佳的C/C++编译器,也无法在所有的情况下都能合理的利用DSP芯片提供的各种资源。此外,用C/C++语言实现DSP芯片某些硬件控制也不如汇编方便,有些甚至无法用C/C++语言实现。 1.2全汇编语言开发   TI公司提供了用于汇编语言开发的针对5000系列DSP的汇编语言。用户可以用他进行软件开发。这种方式可以更为合理的利用芯片提供的硬件资源,其代码效率高,程序执行速度快。但是用汇编语言编写程序是比较复杂的,一般来说,不同公司的芯片汇编语言是不同的,即使是同一公司的芯片,由于芯片的类型不同(如定点和浮点)、芯片的升级换代,其汇编语言也不同。因此,用汇编语言开发基于某种芯片的产品周期较长,并且软件的修改和升级较困难。而且汇编语言的可读性和可移植性较差。 1.3C/C++语言和汇编语言混合编程开发   为了充分利用DSP芯片的硬件资源,更好发挥C/C++语言和汇编语言进行软件开发的各自优点,可以将两者有机的结合起来,兼顾两者优点,避免其弊端。因此,在很多情况下,采用混合编程方法能更好地达到设计要求,完成设计任务。 2 C/C++语言和汇编语言混合编程方法讨论   C/C++语言和汇编语言混合编程的具体方法有以下几种:   (1)独立编写C/C++程序和汇编程序,分开编译或汇编形成各自的目标模块,再用链接器将C/C++模块和汇编模块链接起来,这是一种灵活性较大的方法。但用户必须自己维护各汇编模块的入口和出口代码,自己计算传递参数在堆栈中的偏移量,工作量稍大,但能做到对程序的绝对控制,也能满足软件设计结构化的要求。这是本文主要讲述的方法。   (2)在C/C++程序中使用汇编程序中定义的变量和常量。   (3)在C/C++程序中直接内嵌汇编语句。这种方法可以在C/C++程序中实现C/C++语言无法实现的硬件控制功能,如修改中断控制寄存器、中断标志寄存器等。   (4)在C/C++源程序中使用内部函数直接调用汇编语言语句。   后3种方法由于在C/C++语言中直接嵌入了汇编语言的成分,容易造成程序混乱,C/C++环境被破坏,甚至导致程序崩溃,而编程者又很难对不良结果进行预期和有效控制。而如果采用第一种方法,只要遵循有关C/C++语言函数调用规则和寄存器规则,就能预见到程序运行的结果,保证程序正确。下面分别讲述函数调用规则和寄存器规则,最后给出编程实例。 3函数调用规则   C/C++编译器对函数调用强加了一组严格的原则。除了特殊的运行时间支持库函数外,任何调用函数和被C/C++函数调用的函数都必须遵守这些原则。不遵守这些原则可能破坏C/C++环境并导致程序失败。   图1说明了典型的函数调用。在这个例子中,参数被传递到堆栈中调用者的参数块,函数再使用这些参数调用被调用函数。注意,第一个参数是在A累加器中传递的。这个例子还说明了汇编器对被调用函数的局部帧的分配。局部帧包括局部变量块和局部参数块两部分,其中局部参数块是局部帧中用来传递参数到其他函数的部分。如果被调用函数没有局部变量并且不再调用其他函数或需要调用的函数没有参数,则不分配局部帧。对于混合编程而言,由于被调用函数是手工编写的汇编程序,则局部帧由编程者自己完成分配,也不需要在堆栈中进行,而编译器分配局部帧。   (1)函数如何调用   函数(调用者)在调用被调用函数时执行以下任务。   ①调用者将第一个(最左边)的参数值放进累加器A。调用者将剩下的参数按相反的顺序传进参数块,剩下的最左边的参数在最低的地址。   ②若函数返回一个结构,则调用者为该结构分配空间,然后用累加器A传递返回空间的地址给调用的函数。   ③调用者调用函数。   (2)被调用函数如何响应。   被调用函

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档