DSP教案4(编程基础)讲课用.ppt

上传人:max****ui 文档编号:6338502 上传时间:2020-02-23 格式:PPT 页数:48 大小:542.81KB
返回 下载 相关 举报
DSP教案4(编程基础)讲课用.ppt_第1页
第1页 / 共48页
DSP教案4(编程基础)讲课用.ppt_第2页
第2页 / 共48页
DSP教案4(编程基础)讲课用.ppt_第3页
第3页 / 共48页
点击查看更多>>
资源描述
第四章DSP编程基础 主要内容 TMS320C54x软件开发过程汇编语言程序的编写COFF的一般概念汇编语言程序的编辑 汇编和链接汇编语言程序设计举例 一 软件开发流程图 二 汇编语言程序的编写 在文本编辑器 Editor 中编写满足C54x汇编器 Assembler 格式要求的汇编源程序 用汇编器汇编该源文件 如果源文件中调用了宏 汇编器还会到宏库中搜索该宏 汇编之后生成格式为公共目标文件格式 COFF CommonObjectFileFormat 的目标文件 obj 称为COFF目标文件 用链接器 Linker 链接目标文件 如果包含可运行支持库和目标文件库 链接器还会到所保护的库中搜索所需要的成员 汇编语言程序的编写 续 链接之后生成可执行的COFF执行文件 out COFF执行文件下载到C54xDSP中执行 同时也可借助调试工具 DebuggingTool 对程序进行跟踪调试或优化 也可利用交叉参考列表器 Cross referenceLister 和绝对列表器 AbsoluteLister 生成一些包含调试信息的表 1 汇编语言源程序句法 汇编语言源程序的每一行都可以由四部分组成 句法如下 标号 助记符 操作数 注释 2 例子 lab1 asmy a1 x1 a2 x2 a3 x3 a4 x4 title lab1 asm mmregsSTACK usect STACK 10h 分配堆栈空间 bssa 4 给变量分配空间 bssx 4 bssy 1 defstart datatable word1 2 3 4 数据流 word8 6 4 2 text 以下为程序码流start STM 0 SWWSR addsnowaitstatesSTM STACK 10h SP 设置堆栈指针STM a AR1 AR1指向aRPT 7 重复8次MVPDtable AR1 从程序存储器到数据CALLSUM 调用SUM子程序end BendSUM STM a AR3 子程序进行重复加法STM x AR4 RPTZA 3MAC AR3 AR4 ASTLA yRET end 3 句法解释 标号 供本程序的其他部分或其他程序调用 标号是任选项 标号后面可以加也可以不加冒号 标号必须从第一列写起 但第一个字母不能以数字开头 引用标号时 标号的大小写必须一致 助记符 助记符指令 汇编指令 宏指令和宏调用 作为助记符指令 一般用大写 汇编命令和宏命令 以句号 开始 且为小写 操作数 指令中的操作数或汇编命令中定义的内容 操作数之间必须用逗号 分开 注释 注释从 开始 可以放在单独的一行或数行 注释是任选项 如果注释是从第一列开始 也可以用 号 4 常用的汇编命令伪指令 常用的汇编命令伪指令 续 常用的汇编命令伪指令 续 5 COFF数据型式 三 COFF的一般概念 TMS320C54x的汇编器和链接器都会生成公共目标文件格式 COFF CommonObjectFileFormat 的目标文件 在本章中 将汇编器生成的文件称为COFF的目标文件 将链接器生成的文件称为COFF执行文件 目前 COFF目标文件格式已被广泛使用 因为它支持模块化 段 编程 能够提供有效灵活的管理代码段和目标系统 TargetSystem 存储空间的方法 1 COFF文件中的段 段 section 就是在存储器图中占据相邻空间的代码或数据块 每个目标文件都分成若干个段 一个目标文件中的每一个段都是分开的和各不相同的 COFF目标文件都包含以下三种形式的段 text段 此段通常包含可执行代码 data段 此段通常包含初始化数据 bss段 此段通常为未初始化变量保留存储空间 已初始化段 已初始化段中包含有数据或程序代码 text段和 data段都是已初始化段 用 sect命令建立的段也是已初始化段 未初始化段 bss和 usect 仅仅是用于在存储空间中保留空间 并没有代码或数据 所以未初始化段只有段头 而没有原始数据 重定位信息和行号等 另外 如果程序中没有使用缺省的段 text data和 bss 那么它们在COFF文件中也没有原始数据 重定位信息和行号等 因为它们的原始数据长度为零 汇编器在汇编过程中 根据汇编命令用适当的段将各部分程序代码和数据连在一起 构成目标文件 2 段的分类 3 段的顺序 汇编器在将汇编源程序汇编成COFF目标文件时 将按 text data 用户自定义初始化段 bss 用户自定义的未初始化段 的顺序将各段放入生成的COFF文件中 因为未初始化段 bss和 usect 仅仅是用于在存储空间中保留空间 并没有代码或数据 所以未初始化段只有段头 而没有原始数据 重定位信息和行号等 另外 如果程序中没有使用缺省的段 text data和 bss 那么它们在COFF文件中也没有原始数据 重定位信息和行号等 因为它们的原始数据长度为零 如果源程序不止一个 汇编器在汇编时 会将每个程序的段按如下方式放置 text1 text2 text3 data1 data2 data3 bss1 bss2 bss3等 C54X汇编工具的使用 C54X的源程序可以使用汇编或C语言编写 使用汇编语言是可以使用助记符指令集 MnemonicInstructionSet 或代数指令集 AlgebraicInstructionSet 但两种不能混用 汇编语言的编辑 汇编和链接 目标文件中段与存储器之间的关系 上例中的目标代码图 输入段组合成可执行的目标文件 默认的存储器分配过程 text text1 text2 data data1 data2 bss bss1 bss2 table table 1 table 2 u vars1 u vars1 u vars2 FFT FFT 没有使用 没有配置 没有配置 没有使用 输入段组合成可执行的目标文件 文件之间的链接 两种指令的汇编语言比较 low pass mac push st1 pshmst1push st0 pshmst0push ar0 pshmar0push bk pshmbkar2 data t ar2 mvdm t ar2 ar2ar3 data t ar3 mvdm t ar3 ar3ar0 1 stm 1 ar0bk N stm N bk ar3 a stla ar3 repeat N 1 a 0 rptza N 1 a ar2 0 ar3 0 mac ar2 0 ar3 0 a ASM500命令格式如下 asm500 inputfile objectfile listingfile options inputfile 汇编源文件名 缺省后缀为 asmobjectfile 编译输出的OBJ文件名 缺省后缀为 objlistingfile 产生的列表文件名 缺省后缀为 lstoptions 编译器使用的各种选择 常用选项有 c 若使用该选项 编译器忽略字母的大小写 例如abc与ABC是一样的 系统缺省为区分大小写 i 设置搜索路径 通知编译器在指定的搜索路径中去查找 copy include中的文件 用法举例 ic c54x l 小写的L 在编译时产生列表文件 缺省后缀为 lst mg 汇编源程序使用代数指令集或在源代码中使用 Algebraic s 将所有的符号都放入符号表 若不使用该选项 编译器仅将全局变量放入符号表 v 指定版本 特别是需要使用BOOTLOADER时 应加 v548开关 先看两个汇编源程序 file1 asm globaltestloop calltestbcloop ageq endfile2 asmfile3 asm globaltest globaltesttest test mar ar3 mar ar3 add 1 aa a 1retreturn end end 汇编工具ASM500的使用举例 asm500file1 asmasm500file2 lasm500file3 mg l TMS320C54xCOFFAssemblerVersion1 20SunJul3012 11 252000Copyright c 1997TexasInstrumentsIncorporatedfile2 asmPAGE11 globaltest23000000test 40000006D93mar ar3 5000001F000add 1 a00000200016000003FC00ret78 endNoErrors NoWarnings TMS320C54xCOFFAssemblerVersion1 20SunJul3012 21 262000Copyright c 1997TexasInstrumentsIncorporatedfile3 asmPAGE11 globaltest23000000test 40000006D93mar ar3 5000001F000a a 100000200016000003FC00return78 endNoErrors NoWarnings C54X汇编语言书写规范 语法 label 指令 操作数 注释 前缀表示立即数或直接地址后缀B或b表示二进制常数例如 LD 1000B A后缀Q或q表示八进制常数例如 LD 10Q A十进制常数例如 LD 1000 A C54X汇编语言书写规范 后缀H或h表示十六进制常数例如 LD 1000H A使用 set定义一个符号的值例如addr set1000hstm addr ar0标号的使用例如blooploop ssbxintm使用 global定义全局标号 C54X汇编语言书写规范 使用符号 表示当前PC值例如B 可以使用结构例如item struct intvalue intdeltat len endstruct array tagitem bssarray i len C54X汇编语言书写规范 可以定义宏例如mypush macropshmahpshmalpshmbhpshmblendm 二 C54X连接工具的使用 使用LNK500命令可以将一个或多个OBJ文件连接为一个 OUT文件 在连接时 可以通过段定位控制命令将不同的代码 数据写入不同的内存单元 注意 LNK500生成的OUT文件不是纯二进制代码文件 而是包含代码 符号表 代码定位信息的复合文件 LNK500的使用格式 lnk500 options filename1 filenamen使用举例 lnk500file1 objfile2 obj ofile outLNK500命令常用的选项有 eglobal symbol 定义程序的进入点 global symbol必须在源程序中使用 global命令说明 c 使用C编译器的ROM初始化模式 cr 使用C编译器的RAM初始化模式 idir 指定库文件的路径 lfilename 指定连接时使用的库文件名 mfilename 生成MAP文件 ofilename 指定生成的OUT文件名 系统缺省为a out 将文件file1 asm和file2 asm连接成OUT文件 lnk500file1file2 mfile map ofile out 通过查看MAP文件可以获得变量 子程序等符号的具体地址 注意 MAP文件只列出全局变量的地址 用 global说明的符号 三 汇编链接工具对段的处理 为了灵活使用C54X的内存 可以将不同的代码段放入不同的内存中 在汇编源程序中可以使用下列指令 bss该指令表示在 bss段中保留空间 用法 bsssymbol size usect该指令表示在指定的段中保留空间 用法 symbol usect sectionname size text将代码或数据放入 text段中 data将数据放入 data段中 sect将代码或数据放入指定的段中 用法 symbol sect sectionname size在链接时使用相应的控制命令以确定具体的内存地址 下面给出其中一种方法 其中 bss text data三个段是标准定义 而 vect buffer是自定义的 t cmd MEMORY PAGE0 PROG origin 1800h length 800hPAGE4 PROG origin 0200h length 100hPAGE1 DATA origin 0c00h length 100hPAGE2 DATA origin 0d00h length 200hPAGE3 DATA origin 0f00h length 100h SECTIONS text PROGPAGE0 vect PROGPAGE4 bss DATAPAGE1 data DATAPAGE2 buffer DATAPAGE3 链接命令文件 cmd lab1 obj olab1 out mlab1 map estartMEMORY PAGE0 EPROM org 0E000h len 100hPAGE1 SPRAM org 0060h len 0020hDARAM org 0080h len 100h SECTIONS text EPROMPAGE0 vect EPROMPAGE0 bss SPRAMPAGE1STACK DARAMPAGE1 lab map TMS320C54xCOFFLinkerVersion1 10FriMay2809 48 592002OUTPUTFILENAME ENTRYPOINTSYMBOL start address 0000e000MEMORYCONFIGURATIONnameoriginlengthattributesfillPAGE0 EPROM0000e000000000100RWlXPAGE1 SPRAM0000006000000O020RWlXDARAM00000080000000100RWlX SECTIONALLOCATIONMAPoutputattributes sectionpageoriginlengthinputsections text00000e000000000160000e00000000016lab obj text data10000e016000000080000008000000008lab obi data bss10000006000000009UNINITIALIZED0000006000000009lab obj bss STACK10000008000000010UNINITIALIZED0000008000000010lab obi STACK xref00000000000000074COPYSECTION0000000000000074lab obj xref GLOBALSYMBOLSaddressnameaddressname00000060 bss00000060 bss0000e016 data00000069end0000e000 text0000e000start0000e01eedata0000e000 text00000069end0000e016etext0000e016etext0000e016 data0000e000start0000e0leedata 7symbols 下面是例子程序t asm的一部分 其中红色部分为段的定义 bsstemp 1buf usect buffer 10 sect vect start bmainstartnopnopb textmainstart ssbxintm disableallinterrupt 编译连接程序exer asm 通过MAP文件检查各个段是否装入指定的内存地址 LNK500的选项可以放入内存定位文件中 如user cmd 这时使用连接命令可以简化为 lnk500user cmd
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!