DSP编程技巧之:编译流程与处理器选项

发布者:brian808090最新更新时间:2014-12-21 来源: 互联网关键字:DSP  编程技巧 手机看文章 扫描二维码
随时随地手机看文章

  在我们有关DSP的论坛、博客和一些互动活动中,网友经常会问一些有关“编程技巧”的问题。

  关于编程技巧的定义,也没有一个统一的标准,例如实现一个很复杂的多层嵌套的指针设计算是一种编程熟练的体现吧;又或者用C/C++的高级特性做了很复杂的功能,但是编译器不能完全支持,例如某种内存的动态重分配方法,这时对编译器特性的熟悉就显得很重要了。

  接下来我们就聊一聊DSP编程技巧里面有关编译技巧的一些问题,具体的分类包括编译器的选项、代码的优化、库文件的使用、代码实现标准、实时运行环境等等;了解了这些具体的问题,对于解决在编译和链接程序的时候经常遇到的让人摸不着头脑的警告和错误也是很有帮助的;因为程序的语法错误很容易被编译器发现并定位到具体的代码中,而链接器输出的那些莫名其妙的警告是很难定位的,如果理解了编译流程中各个环节的作用所在,就有了对症下药的入口。编译器主要以TI的CCS编译器为例,目标器件为28系列,相比6000系列的,28系列的要稍微简单一些。

  首先要了解一下基于CCS开发的一个完整流程,以免“只见树木,不见森林”:

DSP编程技巧之:编译流程与处理器选项

  因为很少有文档把它们的具体汉语含义讲清楚,所以在此我们要用通俗的语言描述一下各个部分:

  1. 在这个流程中,与我们编程效率直接相关的就是C/C++编译器了(如果没有使用汇编直接编写的话),它的直接用途是将C/C++代码编译为针对DSP汇编指令集的汇编代码。

  目前的C和C++语言标准有好几个版本,CCS的编译器目前支持的版本包括:

  C语言的C89和C99版本的ISO标准(C99部分支持,主要是与C89一样的特性):通俗的讲就是我们学过的C语言里常用的功能都是支持的,除了一些多字节字符和一些极少数的特性等。不清楚的可以参考Kernighan和Ritchie编写的C语言书籍《The C Programming Language》第二版。

  C++语言的2003版本的的ISO标准: 可以参考Ellis和Stroustrup编写的经典书籍《The Annotated C++ Reference Manual》。同时也支持一部分的嵌入式C++特性。因为C++的特性众多,而许多并不适用于这样一种嵌入式的环境,所以不支持的特性相比C要多一些。

  2. 汇编器的作用是将汇编语言代码转换为机器语言(目标文件),这里的汇编代码包括前面由C/C++生成的汇编代码和我们直接编写的汇编代码。

  3. 链接器是作用是把所有的库文件、目标文件等链接成为一个可执行的目标文件,其中包含程序的机器代码和数据,以及其他用来链接和加载该程序所需的信息(在TI DSP上是COFF格式,通俗地讲就是.out二进制文件),同时根据内存地址的分配对各目标文件进行重定位,并解析外部参考,例如在一个源程序里引用另一个源程序中定义的变量就可以理解为外部参考,假如一个目标文件引用了一个未定义的符号symbol,则链接器搜索其他目标文件中定义的全局符号,找到匹配的符号修补指令。否则报告一个错误;所以有时候编译所有程序完成在链接的时候会提示xxx symbol为定义,说明对应的文件没有加到工程里面。  4. 归档器archiver:也可以叫压缩器,看一下我们常用的压缩软件winrar的全称winrar archiver就不难理解了。

  5. 实时支持库:包括标准C和C++的运行支持函数、编译器公用程序函数、浮点运算函数和C编译器支持的I/O函数,

  6. 十六进制转换程序:把编译、链接等步骤生成的可执行文件,转换为十六进制文件,例如.HEX格式,然后可以烧写到EEPROM、FLASH等外部存储器之中。

  7. 绝对列表器:读取目标文件并输出.abs文件,通过汇编.abs文件可产生含有绝对地址的列表文件,从而使得我们不用手工费时费力地去创建列表文件。这本来不就是软件该做的事情吗:-D

  8. 交叉引用列表:与3中外部参考解析相关的,它用目标文件产生参照列表文件,可显示符号及其定义,以及符号所在的源文件。

  9. C/C++命名还原工具:C/C++编译器会将程序中的变量名、函数名转换成内部名称,这个过程被称作Name Mangling,反过程被称作Name Demangling,即命名还原工具。内部名称包含了变量或函数的更多信息,例如编译器看到?g_var@@3HA,就知道这是:int g_var。具体的还原规则一般是不开放给我们用户的,只要编译器知道就行了。

  10. 调试工具:例如我们电脑上装的CCS软件,让我们可以用断点、图形窗口等进行软件的调试。

  此外,并没有明确列在前面的流程中,但是隐含在流程中,或者我们也有可能会用到的工具或者流程包括:

  1. 优化工具:在编译时对代码进行优化的工具,可以根据我们期望的优化级别,进行从不优化到直至CPU寄存器级别的优化。

  2. 反编译器:可以对目标文件进行解码,显示对应的汇编语言。在CCS的调试模式下,我们可以打开disassembler窗口,然后单步运行,就能看到一条条的汇编指令是如何执行的了。

  3. 加载器:把可执行的二进制文件复制到DSP的内存中,并运行启动程序,使得程序从程序入口处开始运行,这个入口地址可能是地址0,也可能是带有一个偏移量的地址,这个具体的值我们可以以后再具体讨论。

  4. 其它:补充一下名词的定义,包括:

  符号:在整个编译、链接的过程中都会使用到符号symbol的概念,简单地理解,符号就是指一些变量、函数名字等。

  库文件:多个目标文件的压缩包,包含了所有目标文件定义的全局符号的索引。在源程序中如果找不到某些符号的定义,链接器从尝试从库里面提取出对应的目标文件,然后链接到可执行文件里。

  也许你已经熟练使用了CCS好多年,可是当某一天出现一个与cl2000有关的错误的时候,突然间也摸不着头脑了;例如使用老版本的还不支持C2000 FPU的CCS来编译28335的程序,cl2000就会提示你各种不支持然后报错不运行了。Cl2000.exe是神马?

  Cl2000.exe就是和我们的程序编译密切相关的编译器了,使用的方法是:

  cl2000 [编译器选项] [需要编译的文件] [--运行链接器 [链接器选项] 目标文件]]

  使用方法看起来很复杂,还好CCS已经帮我们调用它了(或者说CCS就是一个框架,它完成的编译、调试、链接等功能几乎都需要调用一些别的exe来执行,所以你可能体会过升级了一些库文件、编辑器版本等,界面文件等却不需要进行任何的更改),这些句子会显示在工程的属性里面。当然如果你想亲自体验一把,也可以在ccs安装目录下面的toolscompilerc2000_6.1.5bin下面找到它,即cl2000.exe,然后用命令行的方式运行起来)。举个简单例子:

  cl2000 -v28 symtab.c file.c seek.asm --run_linker --library=lnk.cmd

  --output_file=myprogram.out  在上面的例子中,如果需要编译的文件,例如几个.c或者.asm找不到,CCS就会提示xxx.c或者xxx.asm找不到或者未定义了;或者你改了目标文件的名字,例如改成了a.out,但是加载程序到DSP中的时候却仍然使用更改前的b.out,自然有可能出现预料之外的结果了:在以前帮助网友解决问题的时候,确实出现过这样的状况。

  明白了编译器的调用方法之后,我们就更进一步,揭开编译器中形形色色选项的神秘面纱,从此看到编译器提示的形形色色的警告和错误不再用发怵。

  具体说来,编译器的选项有多大20个大类,超过一百个具体的选项。当然这些选项是有轻重之分的,有的是必须用到的,例如支持一下FPU等功能;有的则是不常接触的,例如MISRA这样的汽车工业软件可靠性检查,只有在对软件进行标准化时才会用到。所以我们首先看一下最常用的选项,例如处理器的选项,它们的意义在于定义了在编译程序时CPU的模式。补充一点是,cl2000的帮助里看到的选项都是很长的名字,在CCS里面为了书写方便(因为选项框就那么点面积啊),一般用别名来代替;没有别名的则直接使用选项名字。

DSP编程技巧之:编译流程与处理器选项

DSP编程技巧之:编译流程与处理器选项

DSP编程技巧之:编译流程与处理器选项

DSP编程技巧之:编译流程与处理器选项

DSP编程技巧之:编译流程与处理器选项

DSP编程技巧之:编译流程与处理器选项

关键字:DSP  编程技巧 引用地址:DSP编程技巧之:编译流程与处理器选项

上一篇:DSP编程技巧之:不得不看的编译指示
下一篇:深度解析DSP电磁兼容性问题

推荐阅读最新更新时间:2024-05-02 23:23

用TL16C752B实现DSP和PC机的串行通信
摘要:介绍了TL16C752B的特点、性能和相关寄存器,给出了通过TL16C752B实现TMS320VC5421和PC机实时通信的方法。同时给出了串口通信部分的硬件应用电路图以及对TL16C752B进行初始化的软件实现程序。 关键词:数字信号处理;通信接口;异步通信;TL16C752B;TMS320VC5421 1 引言 美国德州仪器公司(TI)的TMS320VC54XX系列DSP芯片与PC机实现异步通信通常有两种方法:第一种是使用通用I/O信号XF和BIO作为串口发送和接收信号,用软件逐位发送和接收数据,即软件异步通信方法,这种方法需要占用很多CPU时间,因此,只能在DSP不太忙、实时性要求不高的情况下采用;第二种是通过扩
[嵌入式]
WCDMA系统基带处理的DSP+FPGA实现方案
  摘 要: 本文在分析WCDMA系统基带处理方案的基础上,结合DSP和FPGA性能的比较,提出了一种在性能、灵活性和性价比上都比较理想的DSP+FPGA基带发送的实现方案。   关键词: 第三代移动通信;WCDMA;基带处理;DSP;FPGA   引言   随着Internet的迅猛发展和各种无线业务需求的增加,目前以承载单一话音业务为主的无线通信网已经越来越不适应人们的需要,所以,以大容量、高数据率和承载多媒体业务为目的的第三代移动通信系统(IMT-2000)成为无线通信的发展方向。码分多址(CDMA)技术凭借其良好的抗噪性、保密性和低功率等优点成为第三代移动通信中最主要的多址接入技术。   和传统的CDMA系统相比,
[手机便携]
采用DSP和STM32的双核智能电液伺服控制器
  伺服控制系统大部分都采用传统的硬件结构,控制算法比较固定,而且也无法实现不同工况下的高性能控制算法,难以满足现代工业的需求。现阶段迫切需要研制一种智能型、具有高可靠性、控制性能更加优秀的电液伺服系统。基于DSP与STM32的智能型伺服控制器具有软硬件结合程度更加紧密、系统的智能化程度更高、可实现多种控制策略的优势。本系统从实际的需求出发,结合精确数字PID控制算法和Fuzzy控制算法自身的优势,组合成Fuzzy-PID控制算法,根据偏差的大小范围选择合适的控制算法进行调节。   本设计将两款工控芯片—TI公司的浮点型DSP TMS320F28335和ST公司的ARM7升级版STM32F103RET6引入智能电液伺服系统,设计
[单片机]
采用<font color='red'>DSP</font>和STM32的双核智能电液伺服控制器
面向DSP的电源解决方案
前言 本文描述了一种简单的电源解决方案。它采用同步降压转换控制器,如TPS56100、TPS5210、TPS56xx和TPS5602,面向TI的C6000 DSP应用。同时,本文列举了三种电源解决方案:单电压输入系统(5V或12V)、双电压输入系统(5V和12V)和宽输入电压范围系统(4.5V~25V)。 DSP对电源的要求 TIDSP家族(C6000和C54xx)要求有独立的内核电源和I/0电源。虽然TI的DSP不要求内核电源和I/O电源之间有特殊的上电顺序,但是假如有一个电源低于正常的工作电压,设计时要确保没有任何一个电源在任何时间段处于上电状态。如果违反此规则,将严重影响器件的长期可靠性。另外从系统级考虑,例如
[电源管理]
基于DSP 内嵌ECAN模块的总线接口设计
  0 引言   CAN 总线以其可靠、实时、低成本优势已在汽车、机械等工业控制领域广泛应用。TMS320F2812是TI公司最具代表性的低成本、低功耗和高性能的定点DSP芯片,具有强大的事件管理能力和嵌入式控制能力。其内嵌的增强型CAN 总线控制器(ECAN)模块,完全兼容CAN 2.0B 协议,邮箱数量增加至32 个,并增加了时间戳、消息过滤和超时发送功能,提高了应用CAN通信的灵活性。   ADM3053是ADI公司2011年推出一款集成信号和电源隔离功能的CAN 收发器。本文采用集成ECAN 模块的TMS320F2812 和ADM3053 来设计CAN 节点。该设计将内嵌ECAN模块的DSP作为节点主控制器,同时采
[嵌入式]
一“芯”二用,MCU+DSP处理器大盘点
  近年来,越来越多的领域需要用到高性能,高集成度的DSP器件,功能日益增加的多媒体处理器对DSP的需求也日益剧增,于是,基于MCU+DSP架构的集成芯片也随之应运而生,更低的成本、更小的封装和更微的功耗所开辟的,是一条属于DSP或者MCU厂商们的“阳光大道“而未来,它们还将沿着这条新路继续前行。本系列文章将为你介绍市面上比较流行的基于MCU+DSP架构的处理器或者解决方案。    飞思卡尔DSP56800E   飞思卡尔在DSP与MCU领域深耕数年,为满足市场发展需求,公司率先在56800内核基础上又推出了新一代增强型内核56800E,该产品可在单一内核上提供DSP和MCU双重功能。56800E 系列DSP将为不断增长的工业、
[嵌入式]
一“芯”二用,MCU+<font color='red'>DSP</font>处理器大盘点
基于PCI总线通用DSP信号处理系统的设计
1 引言 1.1 DSP简介及基本特点 数字信号的处理离不开算法和实现手段。数字信号处理器(digital signal processor简称DSP)。是在模拟信号变换成数字信号以后进行高速实时处理的专用处理器,是实现实时数字信号处理的有力工具。DSP目前广泛应用于模式识别,数字通信,信号处理,工业控制等领域。TI公司的TMS320C54X系列DSP有着以下的特点:采用先进的修正增强型哈佛结构,片内共有8条总线(1条程序存储器总线,3条数据存储器总线和4条地址总线);高度并行和带有专用硬件逻辑的CPU设计;高度专业化的指令系统;模块化结构设计;能降低功耗和提高抗辐射能力的新的静电设计方法。因此它能高速实时以及灵活地应用于图像
[嵌入式]
ARM/DSP双核系统的通信接口设计
引 言   嵌入式系统的核心是嵌入式微处理器和嵌入式操作系统。早期的嵌入式系统硬件核心是各种类型的8位和16位单片机;而近年来32位处理器以其高性能、低价格,得到了广泛的应用。近年来,又出现了另一类数据密集处理型芯片DSP。DSP由于其特殊的结构、专门的硬件乘法器和特殊的指令,使其能快速地实现各种数字信号处理及满足各种高实时性要求。随着现代嵌入式系统的复杂度越来越高,操作系统已成为嵌入式系统不可缺少的部分。免费的嵌入式操作系统,如Linux等,随着自身不断的改善,得到了飞速的发展。Linux是一个免费的、强大的、可信赖的、具有可伸缩性与扩充性的操作系统。Linux实现了许多现代化操作系统的理论,并且支持完整的硬件驱动程序、网络通
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved