第4章 DSP软件开发与C语言编程
本章主要内容:
Ø DSP开发工具与软件开发流程(DSP Development Tools and Software Development Flow)
Ø 集成开发环境CCS (IDE Code Composer Studio)
Ø DSP的C工程文件(DSP C Project Files)
・公共目标文件格式COFF(The Common Object File Format)
・链接命令文件(Linking Command Files)
Ø DSP C语言程序设计基础(DSP C Programming Fundamentals)
・数据类型(Data Types) ・运算符与基本语句(Operators and Statements)
・函数(Functions) ・指针(Pointers)
・编译预处理命令(Preprocessor Directives)
・C语言与汇编语言混合编程(Hybrid Programming with C and Assembly)
・C28x DSP编译器的关键字(Keywords for the C28x DSP Compiler) Ø DSP C程序举例(DSP C Program Examples)
4.1 DSP开发工具与软件开发流程
1.DSP开发工具
DSP开发工具包括硬件与软件两部分,即DSP开发系统与集成开发环境CCS(Code Composer Studio)。DSP开发系统称为硬件仿真器(Emualtor),有PC机插卡式(PCI总线)、并行接口式、USB接口式等。目前广泛采用USB接口式,即DSP开发系统通过USB接口与PC机相连,DSP开发系统再通过JTAG(基于扫描的仿真)接口与用户目标板相连,实现DSP软硬件调试与程序烧写。
TI公司及其第三方提供的开发工具有XDS510(Extended Development System)硬件仿真器、DSP教学实验系统、DSP初学者工具DSK(DSP Starter Kit)、DSP评估板(也称为EVM板、DEMO板、目标板、实验板等)。
DSP评估板除了包括基本的DSP芯片及必要的电源、时钟、复位电路外,经常包括用于程序调试的片外扩展存储器、扩展的A/D、D/A转换器、键盘显示电路、E2PROM 芯片、RS232串行接口、SPI接口、C
AN接口的驱动电路、简单应用电路等。
图4-1给出了一个典型的2812 EVM板的电路组成示意图。
113
图4-1 TMS320F2812 EVM原理框图
可以看出,除了TMS320F2812芯片及其电源、时钟、复位电路外,还扩展了64K 字RAM,D/A转换芯片DAC7617等,增加了CAN驱动器、串口驱动器、CPLD电路等,设置了JTAG接口、串行接口、CAN接口及扩展接口插座。
该2812 EVM板的主要性能指标如下:
(1) TMS320F2812,运行速度150MIPS。
(2) 片内RAM 18K字。
(3) 扩展RAM 64K字。
(4) 片内16路12位A/D转换器, 最大采样速率12.5MSPS。
(5) 扩展的4路12位D/A转换器DAC7617。
(6) 两路UART串行接口,符合RS-232C标准。
(7) 16路PWM输出。
(8) CAN总线标准接口。
(9) 用户开关与指示灯。
(10) 片内128K字Flash存储器,带128位加密位。
(11) 具有IEEE1149.1兼容的逻辑扫描电路即JTAG接口,用于仿真调试。
(12) +5V电源输入, 板上3.3V, 1.8V电源管理。
2.软件开发流程
软件开发流程图如图4-2所示, 主要有以下步骤:
(1) 编辑:生成源程序(*.asm, *.c)、头文件(*.h)与命令文件(*.cmd)。
(2) 编译与汇编:生成目标文件(*.obj)及列表文件(*.lst)。
(3) 链接:生成可执行代码文件(*.out)及用于存储器分配的映射文件(*.map)。
(4) 调试:通过JTAG接口下载到目标系统。
(5) 通过JTAG接口将程序烧写到Flash存储器。
114
115
直接编辑生成。汇编语言源文件除了包含程序指令,也包含汇编器命令(Assembler Directive)和宏命令(
Micro Directive)。汇编器命令采用一种指令形式的描述性语言来对汇编过程进行编程和控制。宏命令则提供了一种用户可以自定义指令的方式,用户可以将一个复杂的汇编语言代码块或重复使用的代码块定义为一个宏,在源文件中,通过引用宏不仅可以简化文件的编写,也可减小文件的长度。COFF(Common Objective File Format,公共目标文件格式)是一种二进制目标文件格式,这种格式的特是将程序代码和数据块分成段(Section)。段是目标文件中的最小单位,每个段的代码和数据最终占用连续的存储器地址,一个目标文件中的各段都是互相独立的和有区别的。
(3) 链接器
CCS的链接器是其外壳程序的第三部分,用以将汇编器生成的多个COFF目标文件组合成一个可执行的COFF可执行输出文件(.out)。通常,汇编器生成的COFF目标文件中各代码段或数据段(如.text、.data和.bss)只具有相对地址,它与系统的物理存储器地址之间没有任何关系,必须对其进行地址定位和分配后,这些目标文件才能变成可执行的文件。CCS的链接器有三个主要的作用:①支持用户将COFF文件中的各代码段和数据段分配到实际目标系统的物理存储器中;②根据用户的分配要求,对各代码段和符号重新进行安排,并赋予其最后确定的物理地址;③处理多个文件之间那些没有被定义的外部引用(变量名或函数名等)。用户可以通过链接命令文件(.cmd)来描述实际目标系统的物理存储器地址并进行段的分配,链接器将调用该命令文件实现对目标文件的链接工作。
(4) 归档器
为了重复利用源代码,减小源代码的编写工作量,使用宏是一种有效的办法,而大量的宏可以被组织在一起形成一个专门的库。同样,通用函数的编写也会节省代码量。例如,将一个算法程序写成专门的函数,这是实现模块化编程一般采用的方法,大量这样的函数被组织在一起形成一个库文件。当编写一个新的用户程序时,有效地利用这些宏库或者函数库不仅可以大大节省程序的开发工作量,而且还可以方便地实现程序移植。归档器就是用于建立这样的宏库或者函数库的非常有用的软件工具。归档器可以帮助用户将许多单个的文件组成一个库文件,这些文件可以是源文件,也可以是汇编后的目标文件。无论是汇编器或者是链接器都接受由归档器建立的库文件作为输入,汇编器接受源文件库作为输入,而链接器则接受目标文件库作为输入。例如,当汇编器对用户源程序进行汇编时,它遇到一个宏引用,则汇编器会搜索归档器建立的宏库以到被引用的宏并将其嵌入引用宏的位置。同理,当链接器对用户程序进行链接的时候,当它遇到一个外部函数的调用,它会解析这个函数名,并且到归档器建立的目标文件库中去寻这个同名函数,并为其安排相同的物理地址。归档器除了可以创建库,也可以对库进行修改,比如对库成员进行删除、替换、提取和添加等功能。
(5) 运行时支持库
运行时支持函数是C/C++编译器的一个重要组成部分。C/C++用户经常调用一些标准ANSI函数来执行一个任务,如动态内存分配、对字符串的操作、数学运算(如求绝对值、计算三角函数和指数函数等)以及一些标准的输入/输出操作等,这些函数并不是C/C++语
116
言的一部分,但是却像内部函数一样,只要在源程序中加入对应的头文件(如stdlib.h、string.h、math.h和stdio.h等)就可以调用和使用。这些标准的ANSI函数就是C/C++编译器的运行时支持函数。C28x的C/C++编译器所有的运行时支持函数,其源代码均被存放在一个库文件rts.src内,这个源库文件被C/C++编译器汇编后可生成运行时支持目标库文件。C28x的C/C++编译器包含了两个经过编译的运行时支持目标文件库:rts2800.lib和rts2800_ml.lib。前者是标准ANSI C/C++运行支持目标文件库,而后者是C/C++大存储器模式运行支持目标文件库,两者都是由包含在文件rts.src中的源代码所创建。所谓的大存储器模式是相对标准存储器模式而言的,在标准存储器模式下,C/C++编译器的缺省地址空间被限制在存储器的低64K字,地址指针也是16位。而C28x编译器支持超过16位的地址空间的寻址,这需要采用大存储器模式。在此模式下,C/C++编译器被强制认为地址空间是22位的,地址指针也是22位的,因此28x全部22位地址空间均可被访问。在rts2800.lib 和rts2800_m1.lib中,除了标准的ANSI C/C++运行时支持函数外,还包含一个系统启动子程序_c_int00。运行时支持目标文件库作为链接器的输入,必须与用户程序一起被链接,才可以生成正确的可执行代码。
(6) 库建立程序
C28x的C/C++编译器允许用户对标准的运行时支持函数进行查看和修改,也可以创建自己的运行时支持
库,这通过归档器或建库器来完成。比如,用户可以利用归档器从rts.src中提取某个运行时支持函数的源代码进行修改,然后调用编译器对其进行编译和汇编,最后再利用归档器将汇编后的目标文件写入运行时支持目标库(如rts2800.lib)中。按照同样的步骤,用户也可以创建新的运行时支持库。不过,通过建库器来创建新的运行时支持库有时更加方便和灵活。比如,编译器的不同配置条件和编译选项有时会对生成的运行时支持库有影响,不同条件下生成的运行时支持库未必能完全兼容,此时为了建立合适自己的运行时支持库,经常不需要改变源代码,而仅仅是修改编译器的配置和选项,这样在使用建库器时就更加方便了。
(7) HEX转换程序
用户程序经过C28x的编译器和链接器生成可执行的COFF文件,可以将该文件下载到目标系统的SRAM中运行和调试,或直接烧写到DSP的片内Flash或者片外可编程EPROM 中。CCS提供一个Flash烧写程序,该程序接受标准COFF格式的可执行文件并通过JTAG 仿真器实现对DSP片内Flash的编程。不过要将程序写入片外可编程EPROM中,则在一般情况下需要采用通用编程器来进行。尽管COFF这种格式非常有利于模块化编程以及提供了强大和灵活的管理代码段和目标内存的能力,但是大多数的EPROM编程器并不能识别这种格式,因此CCS提供HEX转换程序,用于把COFF目标文件转换成可被通用EPROM 编程器识别的16进制目标文件格式。HEX转换程序还可以被用于其他需要将COFF文件转换为16进制目标文件的场合,如调试器和上电引导加载(Boot loader)应用。
(8) 绝对列表器和交叉引用列表器
绝对列表器(Absolute Lister)和交叉引用列表器(Cross-Reference Lister)均为调试工具,其中绝对列表器接受链接后的目标文件作为输入,生成一些列表文件(扩展名为.abs),这
117c编程网站
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论