| 四、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文件了
 
 |