前面主要讲了一下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文件了
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |