DSP程序结构解析PPT课件_第1页
DSP程序结构解析PPT课件_第2页
DSP程序结构解析PPT课件_第3页
DSP程序结构解析PPT课件_第4页
DSP程序结构解析PPT课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

1 第5讲DSP5502程序结构解析 2 一 程序整体框架 支持库文件 系统带 需加载 程序源文件 用户写 程序和数据在内存空间中定位文件 库文件 主要为片基支持库CLS文件 3 二 源程序解析 include include include include include include DefineandinitializetheGPTmoduleconfigurationstructure GPT ConfigMyGptConfig 0 Emulationmanagementregister0 GPIOinterruptcontrolregister0 GPIOenableregister0 GPIOdirectionregister0 GPIOdataregister 4 CreateaTIMER HandleobjectforusewithTIMER open GPT HandlehGpt Uint16i 0 Uint16j 0 defineGPIODIR volatileioportUint16 0 x3400 defineGPIODATA volatileioportUint16 0 x3401 voiddelay void for i 0 i 60000 i for j 0 j 100 j 5 voidmain void InitializeCSLlibrary ThisisREQUIRED CSL init PLLconfigurationstructureusedtosetupPLLinterface 300MhzPLL setFreq 1 0 xF 0 1 3 3 0 OpenTimer0 setregisterstopowerondefaults AndreturnhandleofTimer0 hGpt GPT open GPT DEV0 GPT OPEN RESET WriteconfigurationstructurevaluestoTimercontrolregs GPT config hGpt configtheGPIO7asoutputpin 6 for CHIP FSET ST1 55 XF 0 delay CHIP FSET ST1 55 XF 1 delay GPIODATA 0 x80 delay GPIODATA 0 x00 delay 7 源程序基本框架 1 包含库文件2 定义较大的结构体数据 用于配置相关寄存器 3 定义变量及获取句柄4 系统工作配置一般先CSL init 接着PLL setFreq 1 0 xF 0 1 3 3 0 系统时钟配置 8 5 开启相关的功能外设如用定时器 则先获取定时器句柄 然后打开外设 并进行设置 6 主循环 9 二 程序内框架分析 各语句参考各自外设的CSL函数库系统中一些自定义数据需参考源程序的库文件 10 三 CMD文件祥析 11 cmd文件用于DSP代码的定位 由3部分组成 1 输入 输出定义 obj文件 链接器要链接的目标文件 lib文件 链接器要链接的库文件 map文件 链接器生成的交叉索引文件 out文件 链接器生成的可执行代码 链接器选项 2 MEMORY命令 描述系统实际的硬件资源 3 SECTIONS命令 描述 段 如何定位 12 osample out msample map stack100sample objmeminit obj lrts libMEMORY PAGE0 VECT origin 0 xff80 length 0 x80PAGE0 PROG origin 0 x2000 length 0 x400PAGE1 DATA origin 0 x800 length 0 x400 SECTIONS vectors PROGPAGE0 text PROGPAGE0 data PROGPAGE0 cinit PROGPAGE0 bss DATAPAGE1 13 下面介绍一下CMD文件中常用的程序段名与含义1 cinit存放C程序中的变量初值和常量 2 const存放C程序中的字符常量 浮点常量和用const声明的常量 3 text存放C程序的代码 4 bss为C程序中的全局和静态变量保留存储空间 5 far为C程序中用far声明的全局和静态变量保留空间 6 stack为C程序系统堆栈保留存储空间 用于保存返回地址 函数间的参数传递 存储局部变量和保存中间结果 sysmem用于C程序中malloc calloc和realloc函数动态分配存储空间 14 C C源文件 ASM 汇编文件 CMD 命令文件 H 头文件 PRJ 工程文件 LST 列表文件 MAP 映射文件 OBJ 目标文件 OUT 可执行文件 目标文件链接 通用目标文件格式允许用户编写汇编语言程序时使用代码块和数据块 这些块被称为段 用汇编器可以将汇编语言源程序汇编为目标文件 用链接器将若干个目标文件链接成一个可被DSP芯片执行的可执行文件 这些目标文件的格式称为通用目标文件格式 COFF CommonObjectFileFormat DSP系统中常用的文件后缀 15 COFF目标文件总是包括3个默认的段 文本段 用 text定义 通常包括可执行代码 数据段 用 data定义 通常包括已初始化的数据 预留段 用 bss定义 通常保留用于未初始化变量的空间 用 usect sect或 asect伪指令可创建命名段 这些命名段可以像 text data一样被使用 段 目标文件的最小单位被称为段 它是在存储器中占有连续空间的代码块或数据块 16 COFF有两种基本类型的段 已初始化的段 包含数据或代码 用 text和 data伪指令定义的段和用 sect或 asect伪指令创建的命名段均为已初始化的段 未初始化的段 在内存映射中为未初始化数据保留空间 bss段和用 usect伪指令创建的命名段是未初始化的段 在目标文件中这些段没有实际内容 17 汇编器在汇编过程中建立这些段 链接器把段重定位到目标存储器中 所有的段都是独立的 可定位的 相同的段将按先后次序定位在连续的区域内 未初始化段被定位到RAM内 初始化段可单独定位在RAM或ROM内 并且在链接时还可引用其他段内定义的符号 汇编器为每个段设置了一个独立的程序计数器 这些计数器称为段程序计数器 SPC SectionProgramCounters 可以用段程序计数器排列伪指令 align或 even 强迫SPC指向预定的位置 段 段程序计数器 18 链接器通过链接COFF目标文件建立可执行文件 目标文件中的段是链接时的重要依据 链接器可把段定位到用户系统已配置的存储器中 链接器命令文件 cmd 则给出链接器在链接时的有关信息 DSP芯片的存储器配置随应用的不同而不同 用链接器伪指令MEMORY 存储器伪指令 可以确定目标系统的各种内存配置 当MEMORY决定了存储器模式后 可以用链接器伪指令SECTIONS 段伪指令 确定链接器组合输入段的方法和输出段在存储器中的位置 如果不使用这两条伪指令 链接器则用默认存储器的定位方式来组合段 并把它们定位到存储器中 链接器命令文件和链接器伪指令 19 目标文件中的段与目标存储器之间的关系 汇编器伪指令可以用来将数据和代码的各个部分与相应的段相联系 汇编器在汇编的过程中 根据汇编命令 用适当的段将各部分程序代码和数据连在一起 构成目标文件 链接器的一个任务就是分配存储单元 即把各个段重新定位到目标存储器中 如上图所示 20 链接器命令文件 cmd链接器命令文件允许用户把链接信息放置在文件中 命令文件是ASCII文件 可以包含下列各项中的某一项 输入文件名 该输入文件可以是目标文件 归档库或其他命令文件 链接器选项 在命令文件中可以用命令行上的链接器选项 MEMORY和SECTIONS链接器伪指令 注释 用户可以使用 和 定界符把注释加到命令文件中 赋值语句 该语句定义并赋值给全局符号 链接器命令文件和链接器伪指令 21 链接时给符号赋值 赋值语句的语法 链接器中赋值语句的语法类似于C语言中赋值语句语法 符号 表达式 把表达式的值赋予符号符号 表达式 把表达式的值加到符号上符号 表达式 从符号减去表达式的值符号 表达式 符号乘以表达式符号 表达式 符号除以表达式 把SPC赋予符号 表示定位期间SPC的当前值 符号仅可用在SECTIONS伪指令内的赋值语句中 用来表示段的当前运行地址 链接器命令文件和链接器伪指令 22 赋值表达式 链接器表达式必须遵循以下规则 表达式可包含全局符号 常数 以及表8 3 1所列的C语言运算符 所有数被当做长整数 32位 处理 链接器用和汇编器相同的方式识别常数 见表8 3 2 表达式中的符号只具有符号的地址值 不进行类型检查 链接器表达式可以是绝对的或可重定位的 链接器命令文件和链接器伪指令 23 MEMORY伪指令 确定在目标系统中具有物理位置且可被程序使用的存储器范围 MEMORY伪指令的一般语句形式为 MEMORY PAGE0 存储器名1 属性 ORIGIN 常数 LENGTH 常数 PAGEn 存储器名n 属性 ORIGIN 常数 LENGTH 常数 链接器命令文件和链接器伪指令 24 PAGE 定义一个存储器空间 用户可以定义多达255页 PAGE0定义程序存储器 PAGE1定义数据存储器 PAGE2定义I O空间 如果用户没有使用PAGE选项 那么链接器把段定位到PAGE0 每个PAGE代表一个完全独立的地址空间 在PAGE0上已配置的存储器可以和在PAGE1上已配置的存储器重叠 存储器名 命名存储器范围 由1 8个字符组成 名字对于链接器没有特殊的意义 仅指明存储器的区域 在不同页上存储器范围可以有相同的名字 在同一页 所有的存储器范围不能有相同的名字 且不能重叠 链接器命令文件和链接器伪指令 25 属性 可选项 当被使用时 必须用括号括起来 属性把输出段的定位限制在某些存储器范围内 如果用户不使用任何属性 则输出段即可以定位到任何范围内 有效的属性包括 R 存储器可读 W 存储器可写 X 储器可以包含可执行代码 I 存储器可被初始化 ORIGIN 指定存储器的起始地址 也可以写成org或o 这个值是以字节规定的16位常数 也可以是十进制 八进制或十六进制 LENGTH 指定存储器的长度 也可以写成len或l 数值的表示与origin相同 当用户使用MEMORY伪指令时 要确信已指定了所有可用于装载代码的存储器范围 链接器不把程序放到未配置的存储器中 注意 链接器命令文件和链接器伪指令 26 例6 24MEMORY指令举例 SampleCommandfilewithMEMORYdirective file1 objfile2 obj oprog outMEMORY PAGE0 ROM ORIGIN 0C00h LENGTH 1000hPAGE1 SCRATCH ORIGIN 60h LENGTH 20hRAM ORIGIN 200h LENGTH 200h 该例定义了一个存储器系统 具有程序存储器中地址为0C00h 长度为4K字的ROM 数据存储器中地址为60h 长度为32字的RAM 数据存储器中地址为200h 长度为512字的RAM 链接器命令文件和链接器伪指令 27 SECTIONS伪指令 描述输入段怎样被组合到输出段内 定义在执行程序中的输出段 规定输出段在存储器中的位置 允许重新命名输出段 SECTIONS伪指令的一般语法形式是 SECTIONS 段名1 特性1 特性2 段名2 特性1 特性2 指令中的每一行从段名开始定义输出段 输出段是输出文件内的段 在段名之后是特性列表 以逗号隔开 定义段的内容以及它是怎样被分配的 链接器命令文件和链接器伪指令 28 特性列表的选项 段所具备的特性 有以下几种 装载地址 规定段将被装载在存储器中的位置 语法 load allocation或allocation或 allocationallocation是MEMORY伪指令所定义的范围内地址 运行地址 定义段在存储器内运行的位置 语法 run allocation或run allocation如果在一个段中load和run的地址相同 run可以省略 链接器为每个输出段分配两个目标存储器地址 装载地址和运行地址 通常这两个地址是相同的 但有时用户可能把代码装入存储器的一个区域却在另一个区域运行它 例如在引导加载程序 用load设置它的装载地址 用run设置它的运行地址 链接器命令文件和链接器伪指令 29 调准地址 规定段应在地址边界上开始 调准可以使链接器把输出段放在位于n字边界的地址 其中n是2的幂 语法 align n或align n 如 textalign 128 即将 text段定位于页边界 块地址 规定段必须装在两个地址边界之间 它把段定位在大小为n的块内任何地方 如果段大于块 那么段将从该边界开始 和调准一样 n必须是2的幂 语法 block n或block n 如 bssload block 0 x80 定位 bss段使其包含在单个128字的页内或者从新页开始 用户可以单独使用调准或块 也可以和装入地址 运行地址结合在一起使用 但是调准和块不能一起使用 链接器命令文件和链接器伪指令 30 输入段 定义组成输出段的输入段 语法 input sections 输入文件中的段组合起来形成输出段 链接器按照所列出的输入段的次序链接并组合它们 输出段的大小是组成它的输入段的大小之和 通用类型的段的规格说明中没有输入段 如 SECTIONS text data bss 此时链接器从输入文件取出所有 text段并把它们组合到 text输出段内 链接器按照它在输入文件中遇到的次序链接 text输入段 对 data和 bss段的操作与 text相同 用户也可以明确规定组成输出段的输入段 每个输入段用它的文件名和段名来标志 链接器命令文件和链接器伪指令 31 例6 25SECTIONS text f1 obj text f2 obj sec1 f3 objf3 obj text sec2 输入段不必相互同名也不必和输出段同名 如果列举输入文件时不带段 那么它所有的段将被包含在输出段之内 链接器命令文件和链接器伪指令 32 段类型 定义特殊段类型的标志 语法 type COPY或type DSECT或type NOLOAD用户可以把这3种特殊的类型赋予输出段 用COPY和DSECT创建的段是一个虚段 它不包括在输出段存储器分配内 也不占据存储器空间 不包括在存储器映象列表中 但在虚段中定义的全局符号可以被其他输入段引用 COPY段可以将段的内容 重定位信息及行号信息放在输出模块中 而DSECT段则不放置 NOLOAD创建的段不将段的内容 重定位信息及行号信息放在输出模块中 但链接器为其分配空间并包括在存储器映象列表中 链接器命令文件和链接器伪指令 33 填充值 定义用于填充初始化空位的数值 语法 file value或name value当初始化输出段内有空位存在时 链接器必须提供原始数据以填充它 链接器用16位数值填充空位 该数值在存储器内复制直至它填满空位为止 链接器命令文件和链接器伪指令 34 例6 26SETIONS伪指令的使用file1 objfile2 obj oprog outSECTIONS text load ROMrun 0800h const load ROM bss load RAMvectors load 0FF80h t1 obj intvec1 t2 obj intvec2 endvec data align 16 链接器命令文件和链接器伪指令 35 链接器举例例6 27是一个名为demo cmd的链接器命令文件 它链接了3个目标文件 demo obj fft obj和tables obj 并创建了一个名为demo out的可执行程序 假设目标存储器具有下列配置 程序存储器 地址范围内容0 xF0000 0 x3FFFBF片内ROM0 x3FFFC0 0 x3FFFFF中断向量表数据存储器 地址范围内容0 x000040 0 x0001FF堆栈0 x000200 0 x0007FFRAM 10 x3ED000 0 x3EFFFFRAM 2 链接器命令文件和链接器伪指令 36 例6 27命令文件exmp cmd 定义链接器选项 eSETUP 定义程序入口 odemo out 命名输出文件 mdemo map 创建一个输出列表文件 定义输入文件 demo obj 链接三个目标文件 fft objtables obj 定义存储器配置 MEMORY PAGE0 ROM R ORIGIN 3F0000h LENGTH 0FFC0hVECTORS R ORIGIN 3FFFC0h LENGTH 0040hPAGE1 STACK RW ORIGIN 000040h LENGTH 01C0hRAM 2 RW ORIGIN 000200h LENGTH 0600hRAM 1 RW ORIGIN 3ED000h LENGTH 3000h 37 SECTIONS vectors VECTORS PAGE 0 text load ROM PAGE 0 data file 07A1Ch load RAM 1 PAGE 1 tables obj data fft obj data 100h 创建一个长度为100的空间 用07A1Ch填充 var defs RAM 2page 1 包含在dmo obj文件中var defs段的变量链接到数据块RAM 2中 bss RAM 1 page 1 fill 0FFFFh bss的填充和链接 链接器命令文件和链接器伪指令 38 链接器命令文件和链接器伪指令 TMS320C228x器件的默认定位 MEMORY PAGE0 PROG ORIGIN 0 x000040H LENGTH 0 x3FFFC0HPAGE1 DATA ORIGIN 0 x000000H LENGTH 0 x010000HPAGE1 DATA1 ORIGIN 0 x010000H LENGTH 0 x3F0000H SECTIONS text PAGE 0 data PAGE 0 cinit PAGE 0 仅在C程序中使用 bss PAGE 1 用户没有使用MEMORY和SECTIONS的情况下 存储器使用该默认定位 39 程序举例 公用文件 程序设计时 需在多个模块中使用相同设置和中断处理 将芯片中映射至I O空间的寄存器地址及标号 预置变量和常数的空间等设置语句集中在一个文件中 称为I O寄存器头文件 如init h 将转移中断矢量地址的指令集中在一个文件中 称为中断矢量头文件 如vector h 将定义程序 数据和I O空间地址块大小和位置的伪指令集中在一个文件中 称为命令文件 如F206 cmd 这3个文件称为公用文件 40 用 copy或 include伪指令将I O寄存器头文件和中断矢量头文件复制到该应用程序中 形成一个汇编源程序 如delay asm 由汇编器进行汇编后生成一个目标文件 如delay obj 再由链接器把该目标文件和命令文件相链接 生成一个可执行文件 如delay out 对于简单的应用程序也可不使用这两个头文件 直接在应用程序中对用到的I O寄存器和中断转移地址进行设置 程序举例 41 公用文件 程序举例 C20X程序举例 File F206 cmdMEMORY PAGE0 EX1 PM origin 0h length 0FEFFhB0 PM origin 0FF00h length 0100hPAGE1 REGS origin 0h length 60hBLK B2 origin 60h length 20hBLK B0 origin 200h length 100hBLK B1 origin 300h length 100hEX1 DM origin 0800h length 7800hGM DM origin 8000h length 8000hPAGE2 IO IN origin 0FF00h length 0FFhIO EX origin 0000h length 0FF00h 命令文件F206 C203 CMD 可为C203和F206芯片定义程序 数据和I O空间地址块的大小和位置 42 程序举例 C20X程序举例 SECTIONS vectors EX1 PMPAGE0 text EX1 PMPAGE0 bss EX1 DMPAGE1new BLK B2PAGE1 data 0 x0370PAGE1 I O寄存器头文件init h 该文件定义了C20X芯片映射至I O空间的寄存器地址及标号 预置变量和常数 可用 copy或 include伪指令将其复制到应用程序中 43 链接器将输入段组合成一个可执行的目标模块 44 四 CCS的基本操作 45 46 ccs常用文件简介

温馨提示

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

评论

0/150

提交评论