四、VC33中CMD文件的写法
前面主要讲了一下DSP的硬件设计,让大家大致了解了一下。从今天开始,我将向大家介绍VC33的软件设计。这一讲向大家介绍VC33中CMD文件的写法。 所谓CMD文件就是Command文件,即连接命令文件。 1、段 一般来讲,通用目标文件格式(COFF)一般有三种:*.obj、*.lib和*.out。 1)汇编语言中的段 1>未初始化段 .bss——定义变量存放空间 .usect——用户自定义未初始化段 2>已初始化段 .text——可执行的指令码 .data——初始化数据或表格 .sect——用户自定义段 .asect——类上 2)C语言中的段 1>未初始化段 .bss——定义变量存放空间、存放全局、静态变量 .stack——存放C中的栈 .system——存放C中的堆(heap) .const——存放特殊的常数、字符 2>初始化段 .text——指令代码 .cinit——存放全局/静态变量执行初始化的常数数据 .switch——存放C中switch语言产生的表格 明白了吗?呵呵。慢慢来:-) 2、CMD文件 1)输入/输出定义:-l rts30.lib -o DEMO1.out 这两项可由菜单设置。 2)MEMORY命令——指令存储空间 格式如下: MEMORY {
PAGE0 :name1[atlr]:Origin = C1,l = C2
PAGE1 :……
……
}
举个例子: MEMORY
{
RAM0 :O = 800000h ,l = 8000h //片内RAM0
RAM1 :O = 809800h ,l = 800h //片内RAM1
RAM_EX :O = A00000h ,l = 1000h //片外SRAM
}
3)SECTIONS——描述“段”定义在哪个物理地址 格式如下: SECTIONS
{
name :[propertry,propertry,……]
}
其中propertry属性是什么? 1>load——定义段存放在何处 load =(或>) 800100h 2>run——定义段在何处运行 run =(或>) 800300h 举个例子: SECTIONS {
.text :> RAM
.bss :> RAM
.stack :> RAM_EX
}
注意:伪指令MEMORY和SECTIONS只能大写! 下面给出一个完整的CMD文件。 -w -stack 400h -heap 400h -l rts30.lib
MEMORY { RAM : o = 800000h, l = 8000h RAM1: o = 809800h, l = 800h SRAM: o = 1000h, l = 3efffh FLASH: o = 400000h, l = 3fffffh }
SECTIONS { .text: > RAM .data: > RAM .bss : > RAM .cinit: > RAM .stack:> RAM1 .const:> RAM }
大家会了吗? 总之,CMD 它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间。 其实要是在支持BIOS的DSP中,根本不用写CMD文件,直接利用图像配置界面自动生成的CMD文件即可。但是像2407和VC33不支持BIOS的DSP,只能手写CMD文件了 |