




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 DSP原理及开发应用 9/8/20221第5章 TMS320C54x软件开发5.1 软件开发过程及开发工具5.2 公共目标文件格式5.3 常用汇编伪指令5.4 链接器命令文件的编写与使用5.5 汇编语言程序编写方法5.6 TMS320C54x C语言编程5.7 用C语言和汇编语言混合编程9/8/202225.1 软件开发过程及开发工具1建立源程序2C编译器(C Compiler)3汇编器(Assembler)4连接器(Linker)5调试工具6十六进制转换公用程序(Hex Conversion Utility) 返回首页9/8/20223图5-1 TMS320C54x DSP软件开发流程9/
2、8/20224表5-1 TMS320C54xV3.50版代码生成工具程序返回本节9/8/20225C编译器 C54x的C编译器完全支持标准C,C源程序经过C compiler编译生成C54x的汇编源代码,汇编源代码经Assembler生成一个COFF目标文件,Linker链接所有的目标文件,生成可执行的目标文件。 9/8/202269/8/202279/8/202285.2 公共目标文件格式5.2.1 COFF文件的基本单元段5.2.2 汇编器对段的处理5.2.3 链接器对段的处理5.2.4 重新定位5.2.5 程序装入5.2.6 COFF文件中的符号 返回首页9/8/202295.2.1 C
3、OFF文件的基本单元段段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。段可以分为两大类,即已初始化段和未初始化段。如图5-2所示为目标文件中的段与目标系统中存储器的关系。9/8/202210图5-2 目标文件中的段与目标存储器的关系返回本节9/8/2022115.2.2 汇编器对段的处理1未初始化段未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在
4、运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为:.bss符号,字数 符号.usect“段名”,字数9/8/2022122已初始化段已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X存储器中。三个用于建立初始化段的伪指令句法分别为: .text段起点 .data段起点 .sect“段名”,段起点9/8/2022133命名段命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。 data段不同的存储器中,将未初始化的变量汇编
5、到与bss段不同的存储器中。产生命名段的伪指令为: 符号.usect“段名”,字数 .sect“段名”,段起点9/8/2022144子段子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为: 基段名:子段名子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。9/8/2022155段程序计数器(SPC)汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应
6、的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。9/8/202216图5-3 例5-1产生的目标代码返回本节9/8/2022175.2.3 链接器对段的处理链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。9/8/202218链接器有两个命令完成上述功能,即:MEMORY 命令定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。SE
7、CTIONS命令告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。 9/8/202219图5-4 链接器默认的存储器分配返回本节9/8/2022205.2.4 重新定位1链接时重新定位将各个段定位到存储器中,每个段都从合适的地址开始。将符号值调整到相对于新的段地址的数值。调整对重新定位后符号的引用。9/8/2022212运行时重新定位将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。链接器提供了一个
8、简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。返回本节9/8/2022225.2.5 程序装入(1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用装入器的LOAD命令即可装入可执行程序。(2)将代码固化在片外存储器中,采用Hex转换工具(Hex conversion utility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash。 返回本节9/8/2022235.2.6 COFF文件中的符号COFF文件
9、中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况。返回本节9/8/2022245.3 常用汇编伪指令返回首页9/8/202225表5-2 常用的汇编伪指令9/8/2022261段定义伪指令为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件
10、链接起来。段的使用非常灵活,但常用以下约定:.text 此段存放程序代码。.data 此段存放初始化了的数据。.bss 此段存入未初始化的变量。.sect 名称 定义一个有名段,放初始化了的数据或程序代码。9/8/2022272条件汇编伪指令.if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。.if expression 标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。.elseif expression 标志若.if条件为假,而.elseif条件为真时要汇编代码块。.else 标志若.if条件为假时要汇编代
11、码块。.endif 标志条件块的结束,并终止该条件代码块。9/8/2022283引用其他文件和初始化常数伪指令.include 文件名 将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。.copy 文件名 与.include类似。.def 符号名 在当前文件中定义一个符号,可以被其他文件使用。.ref 符号名 在其他文件中定义,可以在本文件中使用的符号。.global 符号名 其作用相当于.def、.ref效果之和。9/8/202229.mmregs 定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。.float 数1,数2 指定的各浮点数连续
12、放置到存储器中(从当前段指针开始)。.word 数1,数2 指定的各数(十六进制)连续放置到存储器中。.space n 以位为单位,空出n位存储空间。.end 程序块结束。9/8/2022304宏定义和宏调用TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。宏定义如下:Macname .macroparameter 1,parameter n .mexit .endm 返回本节9/8/2022315.4 链接器命令文件的编写与使用链接命令文件通过段定位控制命令,分配程序代码、数据运行存储空间。链
13、接命令文件有两个重要的指令:MEMORY和SECTIONS。 返回首页9/8/2022325.4.1 MEMORY伪指令及其使用MEMORY伪指令就是用来指定目标存储器的模型。MEMORY指出目标系统中物理上存在的存储空间的范围,即可供程序使用的存储空间范围。在默认状态下,PAGE0代表程序空间,PAGE1代表数据空间。 返回本节9/8/202233MEMORY伪指令的一般语法为: SECTIONS name : property ,property ,property . name : property ,property ,property . name : property ,prope
14、rty ,property . 9/8/2022345.4.2 SECTIONS伪指令及其使用SECTIONS伪指令功能如下: 说明如何将输入段组合成输出段。在可执行程序中定义输出段。指定输出段在存储器中存放的位置。允许对输出段重新命名。9/8/202235图5-5 例5-6中段的定位返回本节9/8/2022365.5 汇编语言程序编写方法5.5.1 汇编语言源程序格式5.5.2 汇编语言中的常数和字符串5.5.3 汇编源程序中的符号5.5.4 汇编源程序中的表达式 返回首页9/8/202237MEMORYPAGE 0: EPROG: origin = 0 x1400, len = 0 x2c
15、00 ;第0页程序空间开始地址0 x1400,空间长度0 x2c00 VECT: origin = 0 x0080, len = 0 x80 ;第0页中断向量开始地址0 x0080,空间长度0 x80PAGE 1: REGS: origin = 0 x60, len = 0 x1c ;第1页寄存器空间开始地址0 x60,空间长度0 x1c IDATA: origin = 0 x80, len = 0 x1380 ;第1页数据空间开始地址0 x80,空间长度0 x1380 EDATA: origin = 0 x1400,len = 0 x8000 ;第1页扩展数据空间开始地址0 x1400,空间
16、长度0 x8000 EDATA1: origin = 0 x9400,len = 0 x4c00 ;第1页扩展数据空间开始地址0 x9400,空间长度0 x4c009/8/202238SECTIONS .vectors: VECT PAGE 0 ;中断向量在第0页(PAGE 0) .text: EPROG PAGE 0 ;程序代码在第0页(PAGE 0) .cinit: EPROG PAGE 0 ;初始化变量在第0页(PAGE 0) .pinit: EPROG PAGE 0 ;初始化参数在第0页(PAGE 0) .bss: IDATA PAGE 1 ;非初始化变量在第1页(PAGE1) .fa
17、r: IDATA PAGE 1 ;长调函数在第1页(PAGE1) .const: IDATA PAGE1 ;常数在第1页(PAGE1) .switch: IDATA PAGE 1 ;数据交换空间在第1页(PAGE1) .sysmem: IDATA PAGE 1 ; .cio: IDATA PAGE 1 ;c语言输入/输出调用在第1页(PAGE1) .stack: IDATA PAGE 1 ;堆栈在第1页(PAGE1) .csldata: IDATA PAGE 1 ;c语言宏调用在第1页(PAGE1)9/8/2022395.5 汇编语言程序编写方法5.5.1 汇编语言源程序格式5.5.2 汇编语
18、言中的常数和字符串5.5.3 汇编源程序中的符号5.5.4 汇编源程序中的表达式 9/8/2022405.5.1 汇编语言源程序格式助记符指令一般包含4个部分,其一般组成形式为:标号: 助记符 操作数 ;注释1标号区所有汇编指令和大多数汇编伪指令前面都可以带有标号,标号可以长达32个字符,由AZ、az、09、_、和$符号组成,且第一个字符不能是数字,区分大小写。 9/8/2022412助记符区助记符区不能从第一列开始,否则被认为是标号。3操作数区操作数区是一个操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用“,”号隔开。4注释区注释区可以从任何一列开始,可以包含ASCII字符
19、和空格。 返回本节9/8/2022425.5.2 汇编语言中的常数和字符串表5-3 COFF常数与字符串返回本节9/8/2022435.5.3 汇编源程序中的符号1标号2局部标号3符号常数4先定义的符号常数5替代符号9/8/202244表5-4 可以用在表达式中的运算符9/8/202245表5-5 带有绝对符号、可重定位符号的表达式返回本节9/8/2022465.5.4 汇编源程序中的表达式表达式可以是常数、符号或由算术运算符结合的常数和符号。表达式值的有效范围为-3276832767。1运算符(表5-4 所示)2合格的表达式(表5-5所示 )返回本节9/8/2022475.6 TMS320C
20、54x C语言编程5.6.1 存储器模式5.6.2 寄存器规则5.6.3 函数调用规则5.6.4 中断处理5.6.5 表达式分析 返回首页9/8/2022485.6.1 存储器模式1段C54x将存储器处理为程序存储器和数据存储器两个线性块。程序存储器包含可执行代码;数据存储器主要包含外部变量、静态变量和系统堆栈。编译器的任务是产生可重定位的代码,允许链接器将代码和数据定位进合适的存储空间。C编译器对C语言编译后除了生成3个基本段,即.text、.data、.bss外,还生成.cinit、.const、.stack、.sysmem段。9/8/2022492C/C+系统堆栈.stack不同于DSP
21、汇编指令定义的堆栈。DSP汇编程序中要将堆栈指针SP指向一块RAM,用于保存中断、调用时的返回地址,存放PUSH指令的压栈内容。.stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。.stack定义的段大小(堆栈大小)可用链接器选项-stack size设定,链接器还产生一个全局符号_ _STACK_SIZE,并赋给它等于堆栈长度的值,以字为单位,缺省值为1K。9/8/2022503存储器分配(1)运行时间支持函数。 (2)动态存储器分配。 (3)静态和全局变量的存储器分配。(4)位域/结构的对准。 返回本节9/8/2022515.6.
22、2 寄存器规则寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。(1)辅助寄存器 (2)堆栈指针SP (3)ARP (4)在默认情况下,编译器总是假定ST1中的OVM在硬件复位时被清0。若在汇编代码中对OVM置位为1,返回到C环境时必须复位。(5)寄存器变量 返回本节9/8/2022525.6.3 函数调用规则(1)局部帧的产生 (2)参数传递 (3)函数的返回 返回本节9/8/2022535.6.4 中断处理(1)中断的使能和屏蔽必须由程序员自己来设置。 (2)中断程序没有参数传递,即使说明,也会被忽略(3)中断处理程序不能被正常的C程序调用。(4)为了使中断程序与中断
23、一致,在相应的中断矢量中必须放置一条转移指令,可以用.sect汇编伪指令建立一个简单的跳转指令表来完成此项功能。9/8/202254(5)在汇编语言中,注意在符号名前面加上一个下划线,例如c_int00记为_ c_int00。(6)中断程序使用的所有寄存器,包括状态寄存器和程序中调用函数使用的寄存器都必须予以保护。(7)TMS320C54x C编译器将C语言进行了扩展,中断可以利用interrupt关键字由C/C+函数直接处理。返回本节9/8/2022555.6.5 表达式分析当C程序中需要计算整型表达式时,必须注意以下几点:(1)算术上溢和下溢。 (2)整除和取模。 (3)C代码对16位乘法
24、结果高16位的访问。 返回本节9/8/202256关键词 (1)constconst关键词定义常量,用于限定变量或数组数值不变。如果一个变量或数组定义为const,这个变量或数组的存储空间将分配到const段。利用const关键词,可以将大常数表分配到系统ROM中。例如:const int digits = 0,1,2,3,4,5,6,7,8,9;定义整型数组int digits 为一个常数表。9/8/202257关键词(2)ioportioport关键词定义I/O端口,用于访问C54x的I/O空间,其格式如下:ioport type porthex_num其中:ioport是关键词,指出这是
25、一个I/O端口变量。 type只能是char、short、int或unsigned这几种数据类型。 porthex_num是端口变量,hex_num是一个16进制数,表示I/O空间的地址。9/8/202258(3)interruptinterrupt关键词定义中断服务函数,用于指定一个函数为中断服务函数。中断服务函数要求特殊的寄存器保护和返回顺序。当用interrupt关键字指定一个函数后,编译器会按照中断服务函数的特殊要求处理寄存器保护和返回顺序。 9/8/202259(4)near和farnear和far关键词定义函数调用方式,用于指定一个函数如何被调用。 near关键词指定一个函数,编译
26、器会用CALL指令来调用该函数。 far关键词指定一个函数,编译器会用FCALL指令来调用该函数。9/8/202260芯片支持库(CSL) C54x系列CSL(Chip Support Library)是一组C语言可调用的函数、宏和符号,用于配置和控制DSP的片上外设。CSL具有如下的优点: 为各种片上外设编程提供一套标准协议。 通过open和close函数,进行基本的资源管理。 用符号对片上外设的寄存器和寄存器位进行描述,可读性强。便于代码在不同型号DSP之间移植。 便于代码在不同型号DSP之间移植。 9/8/202261CSL由一组模块组成,每个模块对应一个片上外设,所有模块都封装在一个.lib文件里(C5402对应csl5402.lib,Device Support Symbol为CHIP_5402)。CSL的每个模块对应一个.h文件,在程序文件中将.h文件包含,就可以调用对应模块的API函数了。 9/8/202262 用C语言和汇编语言混合编程在进行一些大计算量编程的时候,C代码的效率往往不如汇编代码的效率,但是完全用汇编语言编程几乎是不可能的。比较合适的方法是在对代码效率要求不高的地方用C语言编程,在对代码效率要求严格的地方用汇编语言编程。一般来讲,是在C语言的架构下嵌套汇编算法程序。有四种方法实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铝合金材料施工方案
- (三模)榆林市2025届高三第三次模拟检测生物试卷(含答案详解)
- 数控加工工艺与编程技术基础 教案 模块一 任务4 数控加工机床夹具基础
- 结合农业植保技术的现代农业病虫害防治思路与具体办法探讨
- 医疗机构水污染物排放的管理制度与组织架构
- 石油化工静电接地系统的组成与功能
- 绿色发展与可持续城镇化策略
- 积极稳妥推进碳达峰碳中和的策略及实施路径
- 采购铁皮保温施工方案
- 2018年数学(北师大版选修2-2)练习第3章22最大值最小值问题活页作业14
- 2024年第二学期春学期人教版初中道德与法治八年级下册教学计划附教学进度表版
- 湖北省(面试)公务员考试试题及解答参考(2024年)
- 《营销素养训练-团队与个人管理实务》
- 2024年人教版小学六年级数学下册试卷及答案精校新版
- 院内突发心跳呼吸骤停、昏迷、跌倒事件应急预案及程序
- 日记本产品市场需求分析报告
- 护理美学-第七章 护士的语言美
- 2024年永州市冷水滩区数学五年级第二学期期末达标检测试题含解析
- 《小型水库雨水情测报和大坝安全监测设施建设与运行管护技术指南》
- 2024湖南株洲市天元区面向社会招聘社区专职工作者人员笔试历年典型考题及考点剖析附答案带详解
- 八年级英语上册第一学期期末综合测试卷(人教陕西版)
评论
0/150
提交评论