版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TMS320C54x软件开发介绍1软件开发过程及开发工具1.建立源程序2.C编译器(CCompiler)3.汇编器(Assembler)4.连接器(Linker)调试工具6.十六进制转换公用程序(HexConversionUtility)
返回首页图5-1TMS320C54xDSP软件开发流程表5-1TMS320C54xV3.50版代码生成工具程序返回本节2公共目标文件格式2.1COFF文件的基本单元——段2.2汇编器对段的处理2.3链接器对段的处理2.4重新定位2.5程序装入2.6COFF文件中的符号返回首页2.1COFF文件的基本单元——段段(sections)是COFF文件中最重要的概念。一个段就是最终在存储器映象中占据连续空间的一个数据或代码块。目标文件中的每一个段都是相互独立的。一般地,COFF目标文件包含3个缺省的段:text段、data段、bss段。段可以分为两大类,即已初始化段和未初始化段。如图5-2所示为目标文件中的段与目标系统中存储器的关系。图5-2目标文件中的段与目标存储器的关系返回本节2.2汇编器对段的处理1.未初始化段未初始化段主要用来在存储器中保留空间,通常将它们定位到RAM中。这些段在目标文件中没有实际内容,只是保留空间而已。程序可以在运行时利用这些空间建立和存储变量。未初始化段是通过使用.bss和.usect汇编伪指令建立的,两条伪指令的句法分别为: .bss 符号,字数符号 .usect “段名”,字数2.已初始化段已初始化段包含可执行代码或已初始化数据。这些段的内容存储在目标文件中,加载程序时再放到TMS320C54X存储器中。三个用于建立初始化段的伪指令句法分别为:.text [段起点].data [段起点].sect “段名”[,段起点]3.命名段命名段就是程序员自己定义的段,它与缺省的.text、.data和.bss段一样使用,但与缺省段分开汇编。
data段不同的存储器中,将未初始化的变量汇编到与.bss段不同的存储器中。产生命名段的伪指令为:符号 .usect “段名”,字数 .sect “段名”[,段起点]4.子段子段(Subsections)是大段中的小段。链接器可以像处理段一样处理子段。采用子段可以使存储器图更加紧密。子段的命名句法为:基段名:子段名子段也有两种,用.sect命令建立的是已初始化段,用.usect命令建立的是未初始化段。段程序计数器(SPC)汇编器为每个段安排一个独立的程序计数器,即段程序计数器(SPC)。SPC表示一个程序代码段或数据段内的当前地址。开始时,汇编器将每个SPC置0,当汇编器将程序代码或数据加到一个段内时,相应的SPC增加。如果汇编器再次遇到相同段名的段,继续汇编至相应的段,且相应的SPC在先前的基础上继续增加。图5-3例5-1产生的目标代码返回本节2.3链接器对段的处理链接器对段的处理有两个功能。首先,它将汇编器产生的COFF目标文件(.obj文件)中的各种段作为输入段,当有多个文件进行链接时,它将输入段组合起来,在可执行的COFF输出模块中建立各个输出段。其次,链接器为输出段选择存储器地址。链接器有两个命令完成上述功能,即:MEMORY命令——定义目标系统的存储器配置图,包括对存储器各部分的命名,以及规定它们的起始地址和长度。SECTIONS命令——告诉链接器如何将输入段组合成输出段,以及在存储器何处存放输出段。子段可以用来更精确地编排段,可用链接器SECTIONS命令指定子段。
图5-4链接器默认的存储器分配返回本节2.4重新定位1.链接时重新定位将各个段定位到存储器中,每个段都从合适的地址开始。将符号值调整到相对于新的段地址的数值。调整对重新定位后符号的引用。2.运行时重新定位将代码装入存储器的一个地方,而运行在另一个地方。利用SECTIONS命令选项让链接器定位两次。一些关键的执行代码必须装入在系统的ROM中,但希望在较快的RAM中运行。链接器提供了一个简单的处理该问题的方法。利用SECTIONS命令选项让链接器定位两次。第一次使用装入关键字设置装入地址,再用运行关键字设置运行地址。返回本节2.5程序装入(1)硬件仿真器和CCS集成开发环境,具有内部的装入器,调用装入器的LOAD命令即可装入可执行程序。(2)将代码固化在片外存储器中,采用Hex转换工具(Hexconversionutility),例如Hex500将可执行的COFF目标模块(.out文件)转换成几种其他目标格式文件,然后将转换后的文件用编程器将代码写入EPROM/Flash。
返回本节2.6COFF文件中的符号COFF文件中有一个符号表,用于存储程序中的符号信息。链接器对符号重定位时使用该表,调试工具也使用该表来提供符号调试。外部符号指在一个模块中定义,在另一个模块中使用的符号。可使用.def、.ref或.global汇编伪指令将符号定义为外部符号。.def在当前模块中定义,可以在别的模块中使用的符号;.ref在当前模块中引用,但在别的模块中定义的符号;.global可用于以上任何一种情况。返回本节3常用汇编伪指令返回首页表5-2常用的汇编伪指令1.段定义伪指令为便于链接器将程序、数据分段定位于指定的(物理存在的)存储器空间,并将不同的obj文件链接起来。段的使用非常灵活,但常用以下约定:.text—
此段存放程序代码。.data—
此段存放初始化了的数据。.bss—
此段存入未初始化的变量。.sect'名称'—
定义一个有名段,放初始化了的数据或程序代码。2.条件汇编伪指令.if、.elseif、.else、.endif伪指令告诉汇编器按照表达式的计算结果对代码块进行条件汇编。.ifexpression—
标志条件块的开始,仅当条件为真(expression的值非0即为真)时汇编代码。.elseifexpression—
标志若.if条件为假,而.elseif条件为真时要汇编代码块。.else—
标志若.if条件为假时要汇编代码块。.endif—
标志条件块的结束,并终止该条件代码块。3.引用其他文件和初始化常数伪指令.include'文件名'—将指定文件复制到当前位置,其内容可以是程序、数据、符号定义等。.copy'文件名'—与.include类似。.def符号名
—
在当前文件中定义一个符号,可以被其他文件使用。.ref符号名
—
在其他文件中定义,可以在本文件中使用的符号。.global符号名
—
其作用相当于.def、.ref效果之和。.mmregs—
定义存储器映射寄存器的符号名,这样就可以用AR0、PMST等助记符替换实际的存储器地址。.float数1,数2—
指定的各浮点数连续放置到存储器中(从当前段指针开始)。.word数1,数2—
指定的各数(十六进制)连续放置到存储器中。.spacen—
以位为单位,空出n位存储空间。.end—
程序块结束。4.宏定义和宏调用TMS320C54x汇编支持宏语言。如果程序中需要多次执行某段程序,可以把这段程序定义(宏定义)为一个宏,然后在需要重复执行这段程序的地方调用这条宏。宏定义如下:Macname.macro[parameter1][,…,parametern]……
[.mexit].endm返回本节4链接器命令文件的编写与使用4.1MEMORY伪指令及其使用4.2SECTIONS伪指令及其使用返回首页4.1MEMORY伪指令及其使用MEMORY伪指令就是用来指定目标存储器的模型。MEMORY伪指令的一般语法为:
SECTIONS{name:[property[,property][,property]...]name:[property[,property][,property]...]name:[property[,property][,property]...]}返回本节4.2SECTIONS伪指令及其使用SECTIONS伪指令功能如下:
说明如何将输入段组合成输出段。在可执行程序中定义输出段。指定输出段在存储器中存放的位置。允许对输出段重新命名。图5-5例5-6中段的定位返回本节5汇编语言程序编写方法1汇编语言源程序格式2汇编语言中的常数和字符串3汇编源程序中的符号4汇编源程序中的表达式返回首页1汇编语言源程序格式助记符指令一般包含4个部分,其一般组成形式为:[标号][:]助记符[操作数][;注释]1.标号区所有汇编指令和大多数汇编伪指令前面都可以带有标号,标号可以长达32个字符,由A~Z、a~z、0~9、_、和$符号组成,且第一个字符不能是数字,区分大小写。
2.助记符区助记符区不能从第一列开始,否则被认为是标号。3.操作数区操作数区是一个操作数列表,可以是常数、符号或常数与符号构成的表达式。操作数间需用“,”号隔开。4.注释区注释区可以从任何一列开始,可以包含ASCII字符和空格。
返回本节2汇编语言中的常数和字符串表5-3COFF常数与字符串返回本节3汇编源程序中的符号1.标号2.局部标号3.符号常数4.先定义的符号常数替代符号表5-4可以用在表达式中的运算符表5-5带有绝对符号、可重定位符号的表达式返回本节4汇编源程序中的表达式表达式可以是常数、符号或由算术运算符结合的常数和符号。表达式值的有效范围为-32768~32767。1.运算符(表5-4所示)2.合格的表达式(表5-5所示)返回本节6TMS320C54xC语言编程6.1存储器模式6.2寄存器规则6.3函数调用规则6.4中断处理6.5表达式分析返回首页6.1存储器模式1.段C54x将存储器处理为程序存储器和数据存储器两个线性块。程序存储器包含可执行代码;数据存储器主要包含外部变量、静态变量和系统堆栈。编译器的任务是产生可重定位的代码,允许链接器将代码和数据定位进合适的存储空间。C编译器对C语言编译后除了生成3个基本段,即.text、.data、.bss外,还生成.cinit、.const、.stack、.sysmem段。2.C/C++系统堆栈.stack不同于DSP汇编指令定义的堆栈。DSP汇编程序中要将堆栈指针SP指向一块RAM,用于保存中断、调用时的返回地址,存放PUSH指令的压栈内容。.stack定义的系统堆栈实现的功能是保护函数的返回地址,分配局部变量,在调用函数时用于传递参数,保护临时结果。.stack定义的段大小(堆栈大小)可用链接器选项-stacksize设定,链接器还产生一个全局符号__STACK_SIZE,并赋给它等于堆栈长度的值,以字为单位,缺省值为1K。3.存储器分配(1)运行时间支持函数。
(2)动态存储器分配。
(3)静态和全局变量的存储器分配。(4)位域/结构的对准。
返回本节6.2寄存器规则寄存器规则明确了编译器如何使用寄存器以及在函数调用过程中如何保护寄存器。(1)辅助寄存器
(2)堆栈指针SP(3)ARP(4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国药科大学科研助理招聘(江苏)参考题库含答案详解【综合题】
- 非医学类岗位试题及答案
- 期末电工技术考试试题及答案
- 农业科技知识试题及答案
- 心理学导引试题及答案
- 2026广东佛山市季华实验室科研及公共技术部门招聘10人模拟试卷(名师系列)附答案详解
- 2026重庆市綦江区郭扶镇招聘公益性岗位5人参考题库及参考答案详解(研优卷)
- 边缘计算工业机器人群像识别
- 微粒子液体微型能源系统
- 量子保密通信网络навиг
- 2026年应急管理普法知识竞赛备考题附答案
- 青海省门源县扎麻图金矿详查项目水土保持方案报告表
- 2025年中级会计职称中级会计实务考试试题及答案完整版
- 建筑外墙立面清洗方案
- 2026年人教版高二第二学期语文期末升学备考测评试卷(附答案可下载)
- 5类人员进班子考试题及答案(黑龙江省2026年)
- 中国中暑临床诊疗与急救指南(2025版)
- 2026年全国医师定期考核试题库及答案-人文医学部分
- 2026年中国商业航天行业深度分析报告
- 混凝土拌和站生产控制方案
- 建材公司内部管理制度
评论
0/150
提交评论