DSP技术-04电子通信10_第1页
DSP技术-04电子通信10_第2页
DSP技术-04电子通信10_第3页
DSP技术-04电子通信10_第4页
DSP技术-04电子通信10_第5页
已阅读5页,还剩159页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 C54xDSP的开发环境和工具一、开发过程及开发工具二、汇编语言程序的编辑、汇编和链接过程三、公共目标文件格式(COFF)四、源程序的汇编五、链接器的使用TMS320C50002021/9/121 一般估计,一个嵌入式系统,开发的80%的努力,以及系统的80%的复杂程度,取决于软件。 因此,设计人员在为实时系统选择处理器时,都极为看重先进的、易于使用的开发环境与工具。2021/9/122DSP的开发环境和工具大致可以分为以下几类:代码生成工具系统集成及调试环境与工具实时操作系统一、开发过程及开发工具2021/9/123一、开发过程及开发工具 可编程DSP芯片的开发需要一套完整的软、硬件

2、开发工具,通常可以分为代码生成工具和代码调试工具两大类。 代码生成工具:是指将高级语言或汇编语言编写的DSP程序转换成为可执行的DSP芯片目标代码的工具程序,主要包括汇编器、链接器和C编译器以及一些辅助工具程序等。 代码调试工具:包括C语言/汇编语言源代码调试器、仿真器等。2021/9/124C54x DSP 提供了2种开发环境 非集成的开发环境 集成开发环境Code Composer Studio(CCS)C54x DSP 提供了2种编程语言 汇编语言(.asm ) C/C+语言(.c )2021/9/125TMS320C54xV3.50版代码生成工具程序2021/9/126 TI公司推出的

3、CCS(Code Composer Studio)集成开发环境中集成了非集成开发环境的所有功能,并扩展了许多其他的功能。 CCS在Windows操作系统下运行,用户在开发DSP应用程序时只需在窗口下拉菜单中选择相应操作即可自动执行各工具程序,极大地方便了DSP的软件设计与调试。2021/9/127TMS320C54x DSP软件开发流程2021/9/128EPROM 编程器16 进制代码转换程序文档管理器C源文件宏源文件宏文件库文档管理器目标文件库TMS320C5000助记符指令代数式指令翻译器汇编语言源文件建库实用程序运行支持库绝对制表程序C编译器C源文件C源文件链接器C源文件COFF目标文

4、件汇编器汇编语言源文件可执行COFF文件交叉引用 制表程序有调试器的评估模块硬件在线仿真器软件仿真器CCS集成开发环境DSP 目标系统C语言编辑调试工具程序2021/9/129C 优化编译器 TI 为其TMS320系列 DSP提供了系列的 C 编译器。将标准 C 源文件编译成为相应片种的汇编语言源代码文件,进而汇编和连接,产生可执行的目标文件。 这些 C 编译器符合ANSI C 标准;有运行支持库;一个外壳程序(shell program)可以一步将 C 源代码翻译成为TMS320的目标代码。2021/9/1210C 优化编译器主要特点 完全符合ANSI C标准带有一个完整的运行支持库,包括字

5、符串操作,动态存储器分配,数据转换,三角、指数和双曲线函数等。可以对运行支持函数库和用户定义函数库作扩展2021/9/1211使用多种先进技术来从 C 源代码产生高效汇编代码。通用优化可用于任何 C 代码,而对各片种的专门优化更适应该片种的结构特点。通过简化循环、重新安排语句和表达式、将变量安排入寄存器等方法来改善执行速度,减小 C 程序的大小2021/9/1212归档器公用程序(Archiver Utility),将文件归入单一的档案文件或库中,可以对库作文件的添加、删除、替换等。可以将目标文件库作为连接器的输入2021/9/1213公用目标文件格式(COFF,Common Object F

6、ile Format)使用户能够在连接时定义自己系统的存储器映射,将 C 代码和数据连接到特定的存储区域,从而最大限度地改善其性能。COFF 还为源程序一级的查错提供强有力的支持2021/9/1214包含一个外壳程序(Shell Program),只用一个命令,就可以编译、汇编、和连接,直接从C原文件产生可执行的COFF文件2021/9/1215多种列表文件:(1)汇编语言源文件,可以有选择地包括内部列表、C源代码及使用寄存器的信息(2)预处理输出文件(3)带有行号和操作码的汇编列表文件2021/9/1216C编译器的效率取决于所作的优化的范围和数量。TMS320的C编译器能作很宽范围的多种优

7、化,从而改善其编译所得代码的效率。TMS320的C编译器所作的优化分为适用于所有处理器的通用优化和针对特定片种的专门优化2021/9/1217通用优化改变表达式,字符简化,常数合并将表达式简化成为要求较少指令和较少寄存器的等价形式:(a+b) - (c+d) - (a+b)-c)-d)a = (b+4) - (c+1) - a = b - c + 32021/9/1218数据流优化 使用较少代价的表达式,检测出并去除不必要的赋值,避免再计算已经计算过的值2021/9/1219优化转移/简化控制流 分析程序的转移情况,重新安排操作顺序,消去转移或多余的条件2021/9/1220优化循环相关变量,

8、例如: 为数组元素设置下标的代码改为指针增量的代码; 用计数器控制的循环写成块循环,或使用高效的增/减量转移指令2021/9/1221 在循环中总是计算同样值的表达式,移到循环外面2021/9/1222针对特定片种的专门优化将地址寄存器作为指针来使用。当数组下标结构成为循环变量时,这种优化特别有效2021/9/1223以省时为基础的寄存器配置 根据变量的类型、使用的情况和频率,将寄存器配置存放变量和暂时使用的值。循环中使用的变量的优先级高于其他变量;不再重复使用的变量可以配置到同一个寄存器2021/9/1224通过使用块循环指令RPTB来支持零开销循环使用寄存器来传递函数的自变量2021/9/

9、1225二、汇编语言程序的编辑、汇编和链接过程.asm 汇编源文件.obj 目标文件.cmd 链接命令文件.out 可执行目标文件.lst 列表文件.map 储存器映像文件文本 编辑器调试运行程序链接器汇编器十六进制转换程序HEX5002021/9/1226汇编语言工具TMS320的汇编语言工具是一个软件包,其中包括:汇编器连接器归档器交叉引用列表器十六进制转换公用程序2021/9/1227汇编器(Assembler) 将汇编语言的源程序文件汇编成为机器语言的目标程序文件,其格式为COFF(公用目标文件格式)。汇编语言源程序包括汇编语言指令(instruction)、汇编指令(assemble

10、r directives)和宏指令(macro directives)2021/9/1228连接器(Linker) 连接器的基本任务是将目标文件连接在一起,产生可执行模块。连接器可以接受的输入文件包括汇编器产生的COFF目标文件、命令文件、库文件、以及已部分连接好了的文件。它所产生的可执行COFF目标模块可以装入各种开发工具,或由TMS320器件来执行2021/9/1229归档器(Archiver) 归档器允许用户将一组文件归入一个档案文件(库)。例如,将若干个宏归入一个宏库,汇编器将搜索这个库,并调用源文件中使用的宏。也可以用归档器将一组目标文件收入一个目标文件库,连接器将连接库内的成员,并

11、解决外部引用2021/9/1230交叉引用列表器(Cross-Reference Lister) 交叉引用列表器可以是一个查错工具。它接受已经连接好的目标文件作为输入,产生一个交叉引用列表作为输出。它列出符号、符号的定义、以及它们在已经连接的源文件中的引用2021/9/1231十六进制转换公用程序(Hex Conversion Utility) 将COFF目标文件转换成为若干种标准的文件格式:ASCII-十六进制Extended TektronixIntel MCS-86Motorola ExorciserTI SDSMAC2021/9/1232系统集成与调试工具 TI公司为TMS320系统的

12、集成与调试所提供的工具包括调试器接口(C/Assembly source debugger)、软仿真器(Simulator)、DSP入门套件(DSK,DSP Starter Kit)、标准评估模块(EVM)、以及扩展开发系统XDS(eXtended Development System)等2021/9/1233调试器接口(C/Assembly source debugger)为嵌入式系统的开发提供了丰富的功能与灵活性。该调试器是下面要讨论的软仿真器、评估模块、在线仿真器等的标准接口。该调试器可以运行在PC或SPARC等平台上,对用C 或汇编语言写的程序提供完全的控制。其代码分析功能通过快速确认

13、最费时的程序段,提示应该将开发时间集中在什么地方2021/9/1234TMS320 debugger界面2021/9/12352021/9/1236数据显示窗口2021/9/1237DEBUGGER的性能支持多操作,增强并行处理能力(多处理器、断点、单步)对C代码和汇编代码单独调试或同时调试灵活配置窗口界面灵活的命令输入方式(鼠标、功能键、下拉菜单、批处理文件)全屏编辑,连续更新2021/9/1238代码分析器(CODE PROFILE)分别或同时分析C代码和汇编代码对全局变量、模块、函数可以在各种层次上建立代码分析区域广泛的统计功能,向用户提供代码中瓶颈问题的各种信息(代码的总执行时间、调用

14、子程序的时间等)2021/9/1239软仿真器(Simulator)TMS320软件仿真器是一个软件程序,使用主机处理器和存储器仿真TMS320DSP的微处理器和微计算机模式,从而进行软件开发和非实时的程序验证。在PC机上,典型的仿真速度为每秒几百条指令2021/9/1240软仿真器的性能在主机上执行用户的DSP程序修改和检查寄存器显示和修改数据及程序存储器外设、cache、pipeline的时序仿真设置断点跟踪ACC、PC、AR、表达式的值单步执行2021/9/1241产生中断对非法操作码和无效数据输入等提供出错信息执行批处理文件中的命令文件方式快速存储和调用仿真参数反汇编周期计数并显示20

15、21/9/1242DSP入门套件(DSK,DSP Starter Kit)为初学者设计和生产的DSK是一种用以评价DSP平台的廉价的开发工具。在PC机的DOS或Windows下,用户可以使用DSK来作DSP的实验,进行诸如控制系统、语音处理等应用;也可以用来编写和运行实时源代码,并对其作评估;还可以用来调试用户自己的系统2021/9/1243TMS320C5x DSK2021/9/12442021/9/1245评估模块(EVM,Evaluation Module)TMS320的评估模块(EVM)是廉价的开发板,用于器件评估、标准程序检查、以及有限的系统调试。EVM是一个PC插件,包括目标处理器

16、、一个小容量的存储器、和有限的外设。EVM可以用来实时运行代码,并与外部系统接口2021/9/1246TMS320 EVM2021/9/1247TMS320C62 EVM2021/9/1248TMS320硬件仿真器(Emulators)扩展开发系统(XDS,extended development system)是功能强大的全速仿真器,用以作系统级的集成与调试。扫描式仿真(Scan-Based Emulator)是一种独特的、非插入式的系统仿真、集成、调试方法。使用这种方法,程序可以从片内或片外的目标存储器实时执行,在任何时钟速度下都不会引入额外的等待状态2021/9/1249TMS320边界

17、扫描式仿真器2021/9/1250TMS320边界扫描式仿真器2021/9/1251集成化的DSP开发环境CODE COMPOSER STUDIO为TI的C2000, C5000和C6000而设计将编辑、调试、项目管理、分析和探测集成在一个环境里代码生成器(C编译器、汇编器与连接器)指令集仿真器实时的基础软件(DSP/BIOS)2021/9/1252 主机和目标机之间的实时数据交换(RTDX)实时分析和数据可视化目前可用于WIN95/98/NT/UNIX2021/9/1253基于WIN的图形化界面2021/9/1254集成式开发环境的结构2021/9/1255实时数据交换(RTDX)2021/

18、9/1256从探测点注入和提取信号2021/9/1257多目标调试2021/9/1258eXpressDSP实时软件技术2021/9/1259eXpressDSP实时软件技术使DSP产品的开发过程得以简化和统一为OEM厂商提供可重复使用的软件组成部分大大缩短产品的开发时间,可以达到50%以上2021/9/1260eXpressDSP实时软件技术2021/9/1261Code Composer Studio2021/9/1262Code Composer Studio开放的、具有强大集成能力的开发环境由先进开发工具组成的直观的系统,可以大大缩短DSP的编程时间高级的编码工具,可提供第三方工具接入

19、的开放式结构开发人员可以采用特定的工具自定义环境,满足特殊的设计需要2021/9/1263一个广泛的、可以升级的软件基础提供DSP应用所必须的基本的运行时间系统服务和集成化支持2021/9/1264DSP算法接口标准2021/9/1265以公用性为基础的通用软件它是一套编码协定和应用编程接口(API)该算法可以由创造者编写,然后被其他系统集成人员广泛引用2021/9/1266目前已有越来越多的厂商采纳eXpressDSP实时软件技术,编写标准化的软件随着越来越多应用产品厂商的参与,基于C2000、C5000、C6000系列DSP的算法库和程序库也就越来越丰富2021/9/1267DSP的操作系

20、统对于简单的DSP任务,用前面介绍的开发工具已能满足开发任务的需要,往往不需要操作系统就可以进行。但当DSP的任务增加和任务的复杂性提高,例如对实时性要求很高的多DSP并行操作的多任务系统,可能就需要某种操作系统来管理系统的资源,安排多任务的执行和任务间的信息交换等2021/9/1268 汇编器和链接器建立的目标文件是一个可以在TMS320器件上执行的文件,这些文件格式称为公共目标文件格式(COFF,Common Object File Format)。COFF使模块化编程和管理变得更加方便。三、公共目标文件格式(COFF)2021/9/1269汇编器和链接器功能的异同相同点不同点汇编器建立的

21、是相对地址的COFF文件即.obj文件链接器建立的是绝对地址的COFF文件即.out文件汇编器根据汇编命令用适当的段将各部分程序代码和数据连在一起,构成目标文件。链接器的任务就是分配存储单元,即把各个段重新定位到目标存储器中。建立公共目标文件格式的目标文件2021/9/1270 段:是COFF文件中最重要的概念,一个段就是最终在存储器映像中占据连续空间的一个数据块或代码块,汇编器和链接器根据汇编伪指令来建立和管理各种各样的段。 分段的优点:在目标文件中将程序、数据、变量的代码分开放置,便于在链接时作为一个单独的部分分配存储器空间。由于大多数 DSP系统都有几种形式的存储器,通过对各个段重新定位

22、,可以使目标存储器得到更为有效的利用。1COFF文件的基本单元段 2021/9/1271 COFF 目标文件中有两种基本类型的段:已初始化段和未初始化段。COFF目标文件中至少应包含3个默认的段: .text段(文本段):包含可执行程序代码 .data段(数据段):包含已初始化的数据 .bss段(保留空间段):为未初始化的数据预留空间2021/9/1272目标文件中的段与目标存储器关系的一个例子: 2021/9/12732汇编器对段的处理 用于定义段的汇编命令.bss 未初始化段.usect 未初始化自定义段.text 已初始化程序正文段.data 已初始化程序数据段.sect 已初始化自定义

23、段如果在汇编语言程序中一个段命令都没有用,那么汇编器将把程序中的内容都汇编到.text段中。注意:2021/9/1274 未初始化段主要用来在存储器中保留一定空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间。程序可以在运行时利用这些空间建立和存储变量。未初始化段通过使用2个汇编伪指令建立的:.bss 未初始化段.usect 未初始化自定义段(1)未初始化段 2021/9/1275未初始化段由.bss和.usect命令建立 位置为变量保留存储器空间作用通常将它们定位到RAM区 使用方法 .bss 符号 , 字数 符号 .usect “段名”,字数, , 对应于保留的存

24、储空间第一个字的变量名称 程序员为自定义未初始化段起的名字 2021/9/1276 已初始化段中包含可执行程序代码或已初始化的数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54x存储器中。三个用于建立已初始化段的伪指令为: .text 已初始化程序正文段 .data 已初始化程序数据段 .sect 已初始化自定义段(2)已初始化段 2021/9/1277已初始化段是由.text、.data、.sect命令建立 位置包含有可执行代码或初始化数据 作用通常将它们定位到EPROM区 使用方法.text 段起点.data 段起点.sect “段名”,段起点 由段程序计数器(SPC)

25、定义的一个起始值 程序员为自定义未初始化段起的名字 2021/9/1278 命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 .Data段不同的存储器中,将未初始化的变量汇编到与.bss段不同的存储器中。产生命名段的伪指令为: 符号.usect“段名”,字数 .sect“段名”,段起点(3)命名段 2021/9/1279子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未

26、初始化段。(4)子段 2021/9/1280位置子段结构可以使存储器分配图更加紧密可单独分配空间或在基段位置之后 使用方法基段名:子段名 .sect “.text:_func” 作用2021/9/1281编址过程汇编器为每个段都设置了一个单独的程序计数器即段程序计数器,表示一个程序代码段或数据段的当前地址 作用一开始,汇编器将每个SPC置0。当汇编器将程序代码或数据加到一个段内时,相应的 SPC就增加。链接器在链接时再对每个段进行重新定位。(5)段程序计数器(SPC) 2021/9/1282例 段命令应用举例汇编后产生的.lst列表文件:2 * * * * * * * * * * * * *

27、* * * * * * * * * * * * * 3 * Assemble an initialized table into .data *4 * * * * * * * * * * * * * * * * * * * * * * * * * *5 0000 .data6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 00337 * * * * * * * * * * * * * * * * * * * * * * * * * *8 * * Reserve space in .bss for a variable * *9 * *

28、* * * * * * * * * * * * * * * * * * * * * * * * 10 0000 .bss buffer,1011 * * * * * * * * * * * * * * * * * * * * * * * * * *12 * * still in .data * *13 * * * * * * * * * * * * * * * * * * * * * * * * * *14 0003 0123 ptr .word 0123h段程序计数器2021/9/128315 * * * * * * * * * * * * * * * * * * * * * * * * *

29、 *16 * * Assemble code into the .text section * *17 * * * * * * * * * * * * * * * * * * * * * * * * * *18 0000 .text19 0000 100f add: LD 0Fh,A20 0001 f010 aloop: SUB #1,A 0002 0001 21 0003 f842 BC aloop, AGEQ 0004 000122 * * * * * * * * * * * * * * * * * * * * * * * * * *23 * * Another initialized t

30、able into .data * *24 * * * * * * * * * * * * * * * * * * * * * * * * * *25 0004 .data26 0004 00aa ivals .word 0AAh,0BBh,0CCh 0005 00bb 0006 00cc段程序计数器2021/9/128427 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Define another section for more variables * * * * * * * * * * * * * * * * * * *

31、 * * * * * * * * *30 0000 var2 .usect “newvars”, 131 0001 inbuf .usect “newvars”, 732 * * * * * * * * * * * * * * * * * * * * * * * * * *33 * * Assemble more code into .text * *34 * * * * * * * * * * * * * * * * * * * * * * * * * *35 0005 .text 0005 110a mpy: LD 0Ah,B 0006 f166 mloop: MPY #0Ah,B 000

32、7 000a 0008 f868 BC mloop,BNOV 0009 0006 * * * * * * * * * * * * * * * * * * * * * * * * * * * * Define a named section for int. vectors * * * * * * * * * * * * * * * * * * * * * * * * * * * * 0000 .sect “vectors” 0000 0011 .word 011h,033h 0001 0033段程序计数器2021/9/1285例中,一共建立了5个段:.text 段内有10个字的程序 代码。.d

33、ata 段内有7个字的数据。vectors 是一个用.sect建立的自定义段,段内有2个字的已初始化数据。.bss 在存储器中为变量保留10个存储单元。newvars 是一个用.usect命令 建立的自定义段,它 在存储器中为变量保 留8个存储单元。2021/9/1286上例产生的目标代码源程序行号所属段目标代码2021/9/12873. 链接器对段的处理 链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段配置存储器绝对地址。2021

34、/9/1288链接器通过两个链接命令完成上述功能,即:MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。SECTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以更精确地编排段,可用链接器S命令指定子段。 2021/9/12892个目标文件的链接过程-默认算法 .text.bss.datalnit (自定义段).text.bss.datatables (自定义段)File 1 .textFile 2 .textFile 1 .dataFile 2 .dataFile 1 .bssFile 2 .bsslnit

35、tables可执行代码 .text初始化数据 .data为变量保留空间 .bsslnittables可执行的目标模块存储器映射File1.objFile1.obj2021/9/1290链接器默认的存储器分配2021/9/12914.链接器对程序的重新定位1)链接时重新定位 汇编器处理每个段都是从地址0开始,所以链接时需要对各段重新定位:将各个段定位到存储器中,每个段都从合适的地址开始。将符号(标号)值调整到相对于新的段地址的数值。调整对重新定位后符号的引用。2021/9/12922)运行时重新定位将代码装入存储器的一个地方,而运行在另一个地方时,例如一些关键的执行代码必须装入系统的ROM中,但

36、希望在较快的RAM中运行。链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。2021/9/12935.程序装入 有几种方式可以将程序装入,具体采样哪种方式取决于执行环境。 采用调试工具,如硬件在线仿真器和CCS集成开发环境,它们都具有内部装入器,调用装入器的LOAD命令即可将可执行程序复制到目标系统的存储器中。 采用Hex转换工具将代码固化在片外存储器中,例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash

37、。 2021/9/1294 COFF文件中有一个符号表,用于存储程序中有关的符号信息。链接器对符号重新定位时使用该符号表,调试工具也使用该表来提供符号调试。 外部符号指在一个模块中定义、又可在另一个模块中使用的符号。可使用.def、.ref或 .global汇编伪指令将符号定义为外部符号。6COFF文件中的符号 2021/9/1295用于处理符号的汇编命令.def:在当前模块中定义,并可在其它模块中使用的符号。.ref:在当前模块中使用,但在别的模块中定义的符号。.global:全局符号,可以是上面的任意一种情况。 2021/9/1296x: ADD #56h,A ;定义 x B y ;引用

38、y .def x ;x在此模块中定义, ;可被别的模块引用 .ref y ; y在这里引用, ;它已在别的模块中定义注意:汇编时,汇编器把x和y都放在目标文件的符号表中。链接器必须使所引用的符号与相应的定义相匹配。如果链接器不能找到某个符号的定义,就给出不能辨认所引用符号的出错信息。2021/9/1297汇编语言源程序要素 汇编命令助记符指令 宏命令汇编程序(汇编器)功能: 将源程序汇编成可重定位的目标文件(.obj文件);如果需要,可以生成一个列表文件(.lst文件);将程序代码分段,为每段目标代码快设置一个SPC管理;定义和引用全局符号,可在列表后附加交叉引用表;对条件程序块进行汇编;支持

39、宏功能,允许定义宏命令。四、源程序的汇编2021/9/1298asm500 input fileobject filelisting file-options汇编器是名为asm500.exe的可执行程序 例如 asm500 cjy.asm -l -s -x 源程序cjy.asm经汇编后将生成一个cjy.obj目标文件、列表文件cjy.lst、符号表(在目标文件中)以及交叉引用表(在列表文件中)。1. 汇编程序的运行2021/9/1299例 编写计算y=a1*x1+a2*x2+a3*x3+a4*x4的汇编源程序* * * * * * * * * * * * * * * * * * * * * *

40、 * * * * * * * * * * * example.asm y=a1*x1+a2*x2+a3*x3+a4*x4 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *1 .title “example.asm” ;为汇编源程序取名2 .mmregs ;定义存储器映象寄存器3 STACK .usect “STACK”,10h ;分配10个单元的堆栈空间4 .bss a,4 ;为系数a分配4个单元的空间5 .bss x,4 ;为变量x分配4个单元的空间6 .bss y,1 ;为结果y 分配1个单元的空间7 .def

41、_c_int00 ;定义标号_c_int00 8 9 .data ;定义数据代码段10 table: .word 1,2,3,4 ;在标号table开始的8个单元11 .word 8,6,4,2 ;并为这8个单元赋初值2021/9/1210012 .text ;定义文本代码段13 _c_int00 :STM #0,SWWSR ;软件等待状态R置0,不设等待14 STM #STACK+10h,SP ;设置堆栈指针初值15 STM #a,AR1 ;AR1 指向 a的地址16 RPT #7 ;从程序存储器向数据存储器17 MVPD table,*AR1+ ;重复传送 8个数据16 CALL SUM

42、;调用 SUM 实现乘累加和的子程序19 end: B end ;循环等待20 SUM: STM #a,AR3 ;将系数a的地址赋给AR321 STM #x,AR4 ;将变量x的地址赋给AR422 RPTZ A,#3 ;将A清0并重复执行下条指令4次23 MAC *AR3+,*AR4+, A ;执行乘累加,结果放在A中24 STL A, y ;将A的低字送结果单元y25 RET ;结束子程序,返回 26 .end ;结束全部程序2021/9/12101TMS320C54x COFF Assembler Version 3.70 Tue Oct 19 12:42:59 2004Copyright

43、 (c) 1996-2001 Texas Instruments Incorporatedexample.asm PAGE 1 1 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 2 * example.asm y=a1*x1+a2*x2+a3*x3+a4*x4 * 3 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 5 .mmregs ;定义存储器映象寄存器 6 000000 STACK .usect STACK,10h ;分配10个

44、单元的堆栈空间 7 000000 .bss a,4 ;为系数a分配4个单元的空间 8 000004 .bss x,4 ;为变量x分配4个单元的空间 9 000008 .bss y,1 ;为结果y 分配1个单元的空间 10 .global _c_int00 ;定义标号 列表文件中包括源程序语句和目标代码 2. 汇编时产生的列表文件源文件的每一行都会在列表文件中生成一行。包括行号、段程序计数器SPC的数值、汇编后的目标代码、源程序语句。2021/9/12102 11 000000 .data ;定义数据代码段 12 000000 0001 table: .word 1,2,3,4 ;在标号tabl

45、e开始的8个单元中 000001 0002 ;为这8个单元赋初值 000002 0003 000003 0004 13 000004 0008 .word 8,6,4,2 000005 0006 000006 0004 000007 0002 14 000000 .text ;定义文本代码段 15 000000 7728 _c_int00 STM #0,SWWSR ;软件等待状态寄存器置0,不设等待 000001 0000 16 000002 7718 STM #STACK+10h,SP ;设置堆栈指针初值 000003 0010- 17 000004 7711 STM #a,AR1 ;AR1

46、 指向 a的地址 000005 0000- 18 000006 EC07 RPT #7 ;从程序存储器向数据存储器 19 000007 7C91 MVPD table,*AR1+ ;重复传送 8个数据 000008 0000 源文件的每一行都会在列表文件中生成一行。包括行号、段程序计数器SPC的数值、汇编后的目标代码、源程序语句。2021/9/12103 20 000009 F074 CALL SUM ;调用 SUM 实现乘法累加和的子程序 00000a 000D 21 00000b F073 end: B end ;循环等待 00000c 000B 22 00000d 7713 SUM: S

47、TM #a,AR3 ;将系数a的地址赋给AR3 00000e 0000- 23 00000f 7714 STM #x,AR4 ;将变量x的地址赋给AR3 000010 0004- 24 000011 F071 RPTZ A,#3 ;将A清0,并重复执行下条指令4次 000012 0003 25 000013 B09A MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中 26 000014 0008- STL A,y ;将A的低字内容送结果单元y 27 000015 FC00 RET ;结束子程序 28 .end ;结束全部程序No Assembly Errors, No Ass

48、embly WarningsField 1源程序语句的行号用十进制数表示 Field 2段程序计数器(SPC),用十六进制数表示 Field 4汇编源程序语句 Field 3:目标代码! 未定义的外部引用。 .text段重新定位。” .data段重新定位。+ .sect段重新定位。- .bss和.usect段重新定位2021/9/12104在运行汇编程序时,还可产生交叉引用清单,清单包括符号、定义和引用的位置。 交叉引用列表 LABEL VALUE DEFN REF INT0 0002+ 19 1 ISR2 REF 3 21 proc REF 4 28列出汇编时定义和引用的每个符号 列出一个赋

49、给符号的4位十六进制数值,或说明符号属性的字符或名称。列出引用此符号的语句的行号。如果此栏是空格,表示此符号还没有被引用过。列出定义符号的语句编号。如果此符号未加定义则此栏是空格2021/9/12105REF :外部引用(.globa 段的符号)UNDF:未曾定义过 :在.text段定义的符号。” :在.data段定义的符号。+ :在.sect段定义的符号。 :在.bss或.usect段定义的符号。交叉引用清单中符号的属性2021/9/12106 汇编伪指令(或称汇编命令)用来为程序提供数据和控制汇编进程。C54xDSP汇编器共有约64条汇编命令,根据功能可以将汇编命令分为8大类:(1)对各种

50、段进行定义的汇编命令。(2)对常数(数据和存储器)进行初始化的汇编命令。(3)调整SPC(段寄存器)的汇编命令。(4)对输出列表文件格式化的汇编命令。(5)引用其它文件的汇编命令。(6)控制条件汇编的汇编命令。(7)在汇编时定义符号的汇编命令。(8)执行其它功能的汇编命令。3. 常用汇编伪指令2021/9/12107常用汇编命令列表 2021/9/12108 为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件链接起来。段的使用非常灵活,但常用以下约定:.text 此段存放程序代码。.data 此段存放初始化了的数据。.bss 此段存入未初始化的变量。.sec

51、t 名称 定义一个有名段,放初始化了的数据或程序代码。.usect 名称 定义一个有名段,放未初始化的数据或程序代码。1段定义伪指令2021/9/121092条件汇编伪指令.if .elseif .else .endif 伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。.if expression 标志条件块的开始,仅当条件为真(expression的值非0为真)时汇编代码。.elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。.else 标志若.if条件为假时要汇编代码块。.endif 标志条件块的结束,并终止该条件代码块。2021/9

52、/12110.include文件名将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。.copy文件名 与.include类似。.def 符号名 在当前文件中定义一个符号,可以被其他文件使用。.ref 符号名 在其他文件中定义,可以在本文件中使用的符号。.global 符号名 其作用相当于.def .ref效果之和。3引用其他文件和初始化常数伪指令2021/9/12111.mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。.float 数1,数2 指定的各浮点数连续放置到存储器中(从当前段指针开始)。.word 数1,数2 指定的各

53、16位带符号整型数连续放置到存储器中。.space n 以位为单位,空出n位存储空间。.end 程序块结束。2021/9/12112 TMS320C54xDSP汇编程序支持宏语言。如果程序中需要多次执行某段程序时,可以把这段程序定义为一个宏(即宏定义),然后在需要重复执行这段程序的地方调用这条宏指令(即宏调用)。4宏定义和宏调用2021/9/12113 两者都可以被多次调用,但子程序汇编成目标代码的过程只进行一次,而在用到宏指令的每个地方都要对宏指令中的语句逐条地进行汇编。 在调用前,一般子程序不使用参数,故子程序所需的寄存器等都必须事先设置好;而宏指令,由于可以使用参数,调用时只要直接代入参

54、数就行了。 宏指令可以在源程序的任何位置上定义,但必须在用到它之前先定义好。 宏定义可以嵌套。 宏指令与子程序对比:2021/9/12114macname .macroparameter 1,parameter n助记符指令与宏指令.mexit.endm宏定义的格式 宏调用的格式 label:macname parameter1,parametern2021/9/121151 *23 * add34 *5 * ADDRP=P1+P2+P3 ;说明宏功能67 add3 .macro p1,p2,p3,ADDRP ;定义宏89 LD p1,A ;将参数1赋给A10 ADD p2,A ;将参数2与A

55、相加11 ADD p3,A ;将参数3与A相加12 STL A,ADDRP ;将结果A的低字存参数413 .endm ;结束宏141516 .global abc,def,ghi,adr ;定义全局符号1718 000000 add3 abc,def,ghi,adr ;调用宏11 000000 1000! LD abc,A ;宏展开1 000001 0000! ADD def,A 1 000002 0000! ADD ghi,A1 000003 8000! STL A,adr例 宏定义、宏调用和宏展开的一个例子。2021/9/12116五、链接器的使用-目标文件的链接 链接器主要功能 根据链接

56、命令或链接命令文件(.cmd文件),将一个或多个COFF目标文件链接起来,生成存储器映象文件(.map)和可执行的输出文件(.out)(COFF目标模块) 2021/9/12117(.cmd 文件) 链接命令或链接命令文件文件(.map文件) 储存器映像文件LNK500(.obj 文件) 一个或多个目标文件 (.out 文件) 可执行输出文件1运行链接程序 2021/9/121182个目标文件的链接过程-默认算法 .text.bss.datalnit (自定义段).text.bss.datatables (自定义段)File 1 .textFile 2 .textFile 1 .dataFil

57、e 2 .dataFile 1 .bssFile 2 .bsslnittables可执行代码 .text初始化数据 .data为变量保留空间 .bsslnittables可执行的目标模块储存器映射File1.objFile1.obj2021/9/12119(1)键入命令 lnk500 (2)键入命令lnk500 file1.obj file2.obj o(3)键入命令 lnk500 linker.cmd 链接器是名为lnk500.exe 的可执行程序应包含如下内容:file1.objfile2.obj-o lind.out建立一个名为a.out(默认情况)的可重新定位的输出模块。 2链接器选项

58、 2021/9/121203.链接器对段的处理 (1)把一个或多个COFF目标文件中的各种段作为链接器的输入段,经链接后在一个可执行的COFF输出模块中建立各个输出段。(2)为各个输出段选定存储器地址。链接器在对段进行处理时,主要完成 汇编器在需要引用重新定位的符号处都留了一个重定位入口。链接器对符号重定位时,利用这些入口修正对符号的引用值。 2021/9/12121 链接器将输入段组合成一个可执行的目标模块2021/9/12122例:列表文件中,汇编器为需要重新定位的符号所留的重定位入口。1 .ref X ;2 0000 .text3 0000 FO73 B Y ;生成一个重定位入口 000

59、1 00044 0002 F020 LD #X,A ;生成一个重定位入口 0003 0000!5 0004 F7E0 Y: RESET在.text段对X的引用是一次外部引用(!) .text段内对Y的引用是一次内部引用() .text段内定义Y另一个模块中定义的X,本模块使用 2021/9/12123 假设链接时X重新定位在地址7100h,.text段重新定位到从地址7200h开始,那么Y的重定位值为7204h。链接器利用两个重定位入口,对目标文件中的两次引用进行修正: F073 B Y 变成 F073 0004 7204 F020 LD #X,A 变成 F020 0000! 7100 在CO

60、FF目标文件中有一张重定位入口表。链接器在处理完之后就将重定位入口消去,以防止在重新链接或加载时再次重新定位。2021/9/121244.链接器命令文件 (1)将有多个选项的命令,写成一个链接器命令文 件.cmd。 (2)运行链接器命令文件.cmd后,生成一个映象文 件.map和一个可执行的输出文件.out (3)进行存储器分配主要功能 使用方法Lnk500 链接器命令文件名.cmd 2021/9/12125例 链接器命令文件举例。a.obj b.obj /* 输入文件名 */-o prog.out /* 选项 */-m prog.map /* 选项 */MEMORY /* MEMORY 命令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论