本文介绍基于C54x的DSP的软件开发环境与编译器,汇编器,链接器的使用,对开发流程也有所涉及。
以下是基于DSP的实时系统开发设计框图
首先根据需求设计规范,确定设计的目标,然后进行算法研究和仿真,定义系统性能指标,根据性能指标选择DSP芯片,之后就是开发和系统集成测试部分,包括软件和硬件部分。在信号处理中需要考虑的是DSP算法和软件 仿真,在非信号处理中,需要考虑具体的应用环境、可靠性、可维护性、功耗、体积、重量、成本等。
1、'C54xx软件开发过程
编译链接
编译器:cl500 -g -k file.c -z file.cmd -q
汇编器:[asm500 file.asm -s -l file.lst]
链接器:[lnk500 file.obj … file.cmd-m file.map -o file.out -e start ]
在CCS集成环境中通过 Build Options 选择各选项
2、汇编语言程序的编写格式及COFF(Common Object File Format)文件的一般概念
(1)汇编源程序组成及格式:
[标号][:] 助记符 操作数,操作数 [ ;注释]
(2)常用伪指令:用它控制汇编和链接过程,不占存储空间;
(3)COFF文件一般概念:
1.定义:能被'C54x执行的、由汇编器和链接器创建目标文件格式;
2. 优点:便于模块化管理;
3. 格式:有三种:
COFF0、COFF1、 COFF2,每种格式只是标题形式不同,数据部分是相同的;默认格式是COFF2;
② 段(Section)的概念:
定义:在存储器图中占据相邻空间的代码或数据块称为段,是组成目标文件的最小单元;
符号:段都用"."开始,用小写字母表示;
段的分类:
(ⅰ) 已初始化的段:包括数据、程序代码等
. text .data .sect .asect等
(ⅱ) 未初始化的段:为未初始化的数据(变量)预留空间
.bss .usect等
目标文件中的段与目的存储器间的关系:
(4)段的处理:
#汇编器在汇编时,根据汇编伪指令用适当的段将各部分程序代码和数据代码连在一起,构成目标文件;
#链接器将各个段重新定位到目标存储器中;
3、汇编器: .asm 文件 .obj 文件
(1)主要功能:将汇编源程序汇编成一个可以重新定位的目标文件(.obj 文件);
#按需要生成列表文件(.lst 文件);
#为每个目标代码块设置一个段程序计数器(SPC);
#定义和引用全局,需要时在列表文件后面附加一张交叉引用表;
#汇编条件块;
#支持宏调用;
(2) 汇编器对段的处理和列表文件:
#汇编器根据汇编指令,处理和识别各个段,并将相应的段加到已存在的段中,建立单一的段;
(3) 汇编命令格式及汇编伪指令
#命令格式:asm500 [ input file [ object file [listing file] [option]
# option、汇编伪指令功能及分类以及常用汇编伪指令可以参考用户手册
4、链接器
(1)主要功能:根据链接命令或链接命令文件(. cmd文件),将一个或多个COFF目标文件链接成可执行的输出文件(.out文件)和按需要生成存储器映象文件(.map文件)。
(2)链接器对段的处理:
#把一个或多个COFF目标文件中的各个段作为链接器的输入段,经链接后在一个可执行的COFF输出模块中建立相应的输出段;
#为各个输出段选定相应的存储器地址;
#链接器根据汇编器建立的段,确定这些段存放在目标存储器中的位置称为重定位;
(3) 链接命令格式及链接伪指令:
1.命令格式:
lnk500 file1.obj file2.obj –m file.map –o file.out –e start
2. option
3.链接伪指令:
□存储器指令(MEMORY):
定义目标系统存储器配置图,包括存储器的命名、规定它们的起始地址和长度;
□段指令(SECTIONS):
告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器的什么位置;
(4) 链接命令文件(.cmd文件)的编写:
5、应用C编译器时建立的段
1. 初始化的段
□.text-可执行的代码和常数(PAGE 0);
□.cinit-初始化的全局和静态变量表(PAGE 0);
□.const-字符串常数和初始化的全局和静态变量(PAGE 1);
□.switch- C中switch语句描述的表格 (PAGE 0);
2. 未初始化的段
□.bss-为全局和静态变量保留的空间(PAGE 1);(在程序开始时,C boot 程序把放在ROM中的.cinit section的数据拷贝到.bss section中 )
□.stack-系统堆栈存储器(PAGE 1);(堆栈存储器用作函数的参数传递和分配局部变量)
□.sysmem-为C中动态存储器分配函数保留空间(PAGE 1)(如malloc、calloc等,其块大小由head伪指令定义)
﹡.data section由汇编器建立,用于初始化数据段,C 编译器不用这个段;