280 likes | 387 Views
第 4 章 程序编写和调试环境简介. 4.1 程序的编写 TMS320LF240x DSP 提供两种编程语言:汇编语言和 C/C++ 语言 下面的介绍以汇编语言为主 进入程序调试之前要求有 3 种格式的文件:头文件、汇编语言文件和命令文件. 常用的几个汇编伪指令 * 定义段的伪指令: .sect .bss .text 等 * 初始化常数的伪指令: .word .int .byte 等 * 引用其他文件的伪指令:
E N D
第4章 程序编写和调试环境简介 4.1 程序的编写 TMS320LF240x DSP提供两种编程语言:汇编语言和C/C++语言 下面的介绍以汇编语言为主 进入程序调试之前要求有3种格式的文件:头文件、汇编语言文件和命令文件 • 常用的几个汇编伪指令 • * 定义段的伪指令: .sect .bss .text等 • * 初始化常数的伪指令:.word .int .byte 等 • * 引用其他文件的伪指令: • .copy .include .global .def .ref 等 DSP芯片技术及应用
定义段的伪指令 定义段的伪指令:把汇编语句程序的各部分与适当的段联系起来。 (1).asect 创建具有绝对地址的初始化命名段。包含代码或数据。在绝对段内,用户可以使用.label伪指令来定义可重定位标号。 (2).bss 为未初始化的变量。在.bss段内保留存储器空间。 (3).sect 定义初始化命名段并把后续代码或数据与该段相联系。用.sect定义的段可包含代码或数据。 (4).text 标示.text段内代码部分。.text段通常包含可执行代码。 (5).usect 在未初始化命名段内保留空间。.usect伪指令和.bss伪指令相类似,但是它允许用户与段.bss分开保留空间。 DSP芯片技术及应用
初始化常数的伪指令 (1).byte:将一个或多个8位的数值置入当前段连续的字中。除了每个数值的宽度限制为8位以外,与.word类似。 (2).int和.word:将2个或多个16位值置入当前段的连续字中。 (3).long和.blong:将32位数值置入当前段连续两个字中,先存放低位字。 .blong:保证目标不会跨越数据页的边界。 DSP芯片技术及应用
.set和.equ:把常量值赋予符号。 类C的结构定义使用户能把类似的元素组合在一起,然后把元素偏移量(offest)的计算留给汇编器。 汇编时(Assembly-Time)符号伪指令 DSP芯片技术及应用
其他伪指令 (1).end:终止汇编。它是一个程序的最后一条源语句。此伪指令与文件结束符具有同样的效果。 (2).label:定义一个特定的标号,表示当前段的装载地址。当段在一个地址处装载但在另一个地址处运行时,该指令特别有用。 (3).version:告诉汇编器该代码是属于哪一种处理器。.version伪指令必须出现在指令之前,否则将出错。 DSP芯片技术及应用
引用其它文件的伪指令 (1).copy和.include:告诉汇编器开始从其它文件中读入源语句。 当汇编器完成从copy(复制)或者include(包含)文件内读入源语句时,恢复从当前文件读源语句。 (2).def:识别在当前模块中定义且可以被其它模块使用的符号。 (3).global:声明外部符号。 .global伪指令对于已定义符号起.def的作用,对于未定义符号起.ref的作用。 (4).ref:识别在当前模块中使用但在其它模块中定义的符号。 DSP芯片技术及应用
第4章 程序编写和调试环境简介 • 3种基本的文件 • 源程序: 汇编语言文件:后缀为.asm,C混编 .c • 头文件:后缀为.h, 包含以字符定义的一些寄存器 • 命令文件:后缀为.cmd,实现对程序存储器和数据存储器空间的分配。(一般写好后不再改动) • 命令文件中常用的伪指令有:MEMORY 和SECTIONS。 DSP芯片技术及应用
寄存器头文件F2407_C.H F2407_C.H头文件中定义DSP系统用到的一些寄存器映射地址。用户用到的常量和用户自定义的寄存器都在头文件中定义,头文件名的后缀为.H。 寄存器头文件可以从其他文件或相关资料中复制,或复制后根据需要进行修改。 DSP芯片技术及应用
左图为纯汇编使用的头文件F2407REGS.H的片断。 其中可定义常用的(部分)寄存器、宏、用户自定义的变量等 头文件的使用使软件编程的灵活性和程序的可读性大大提高 DSP芯片技术及应用
P95页 头文件 混编中寄存器都是以指针方式进行寻址 volatile 告诉编译器变量是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新读取数据.而优化做法是,由于编译器发现两次读数据的代码之间的代码没有对i进行过操作,它会自动用上次读的数据。而不是重新读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。 DSP芯片技术及应用
命令文件 .CMD 命令文件名的后缀为.CMD,命令文件实现对程序存储器空间和数据存储器空间的分配。 文件常用的伪指令有MEMORY和SECTIONS伪指令。 MEMORY:用来标示实际存在目标系统中且可被使用的存储器范围,每个存储器范围具有名字,起始地址和长度。 SECTIONS:描述输入段怎样被组合到输出段内;在可执行程序内定义输出段;规定在存储器内何处放置输出段;允许重命名输出段。 DSP芯片技术及应用
Memory伪指令的一般语法 MEMORY { PAGE0: namel[(attr)]: origin=constant ,length=constant; PAGEn: namen[(attr)]: origin=constant ,length=constant; } PAGE 标示存储器空间。用户可以规定多达255数据页。 PAGE0规定程序存储器,PAGE1规定数据存储器。 name 命名存储器范围。存储器可以是1至8个字符。在不同页上的存储器范围可以具有相同的名字,但是在一页之内所有的存储器范围必须具有唯一的名字且必须不重叠。 DSP芯片技术及应用
attr 规定与已命名范围有关的1~4个属性。未规定属性的存储器具有所有4个属性。attr 规定与已命名范围有关的1~4个属性。未规定属性的存储器具有所有4个属性。 有效的4个属性包括: R 表示存储器可以读出; W 表示存储器可以写入; X 表示存储器含有可执行代码; I 表示存储器可以初始化。 origin 表示存储器范围的起始地址。 length 表示存储器范围的长度。 DSP芯片技术及应用
SECTIONS伪指令的一般语法 SECTIONS { name :[property,property,property,…] name :[property,property,property,…] name :[property,property,property,…] } 以name(名字)开始的段的规格说明定义了一个输出段。 在段名之后是特性列表,定义段的内容以及它们是怎样被分配的,特性可以用逗号来分开. DSP芯片技术及应用
段可能具有的特性: (1)装载位置:规定段将被装载在存储器内何处; (2)运行位置:定义段将在存储器内何处运行; (3)输入段:定义组成输出段的输入段; (4)段类型:定义特定段类型的标志; (5)填充值:定义用于填充未初始化空位的数值。 DSP芯片技术及应用
命令文件实现对程序存储器空间和数据存储器空间的分配命令文件实现对程序存储器空间和数据存储器空间的分配 MEMORY指明目标系统中可被使用的存储器范围 SECTIONS主要标明输出段在存储器中的一般位置 DSP芯片技术及应用
4.2 调试环境代码编译器CC DSP芯片技术及应用
采用传统的电路仿真方法很难实现可靠的仿真 DSP芯片技术及应用
各类仿真器品牌及接口类型 DSP芯片技术及应用
作业 根据如下的存储空间配置,编写一个*.CMD文件,并在本文件中对.text, .vectors(有自定义的中断向量段),.bss段定位。 其中,.bss定位在B2区) DSP芯片技术及应用