打印
[资料分享]

编写 CMD 文件之——资源清单

[复制链接]
751|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sfsfhsh|  楼主 | 2017-4-25 11:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CMD 文件包含两大内容,首先就是存储器的资源清单,或者说,系
统中(电路板上)可用的存储器资源。
TI 规定,CMD 文件的资源清单用关键字“MEMORY”作为标识,具体内容写在后
面的大括号 { } 里面。如下面的形式:
MEMORY
{
PAGE 0:
xxx : org = 0x1234 , length = 0x5678 /*This is my house.*/
PAGE 1:
aaa : org = 0x1357 , length = 0x2468 /*My home here.*/
}
其中,MEMORY,PAGE n,org,length,包括冒号、等于号、花括号,都是关键
字符,必不可少。
PAGE n 表示把可用的资源空间再划分成几个大块,最多允许分256 块,从PAGE
0 到PAGE 255。如果把MEMORY 比作图书馆,PAGE n 就是其中的“社科类”、“工程类”、
“外文类”等。大家都习惯于把PAGE 0 作为程序空间,把PAGE 1 作为数据空间。如果
你很好奇,也可以试试别的数字。凡智能芯片,都离不开这两种“空间”,大名鼎鼎的冯·诺
依曼结构和哈佛结构,都是建立在程序空间和数据空间两种结构的基础上,我们面对的
DSP 也是如此。只要学习过单片机,就很容易理解。如果你构思出第三种结构,恭喜您,
您将与这二位齐名了。
CMD 文件中还可以写上注释,用“/*”和“*/”包围起来,但不允许用“//”,这一
点和C 语言不同。
上面的例子,仅仅就是个“例子”,不针对任何特定的芯片。带注释的语句有两行,
每一行都是一项声明,表示在程序空间或数据空间下,再细分更小的块,好比是“社科类”
又分了几个书架。比如
xxx : org = 0x1234 , length = 0x5678
表示在程序空间 PAGE 0 里面,划分出一个命名为xxx 的小块空间,起始地址从存储单元
0x1234 开始,总长度为0x5678 个存储单元,地址和长度通常都以十六进制数表示。所以,
xxx 空间的实际地址范围从0x1234 开始,到0x1234 + 0x5678 – 1 = 0x68AB 结束(起始
地址加长度再减一),这一段连续的存储区域,就属于xxx 小块了。上面的例子中,PAGE
0 和PGAE 1 各包含了只有一个“小块”,用户可以根据自己的情况,按照同样的格式任意
增加。在支持多个CMD 文件的开发环境里,某个或某几个CMD 文件中,“小块”的数量
可以为0,也就是说,关键字PAGE 0 或PAGE 1 下面,可以是空白的。但不允许所有的
CMD 文件的同一空间都是空白。另外,没有资料提到过“小块”数量上限的限制,需要去查阅文档或咨询TI 公司。
很多关键字,还允许有别的写法,比如“org”可以写为“o”,“length”可以写为
“len”。这些规定和其他细节,可以去查阅TI 的pdf 文档,一般叫做“xxxxx Assembly
Language Tools User's Guide.pdf”,汇编语言工具指南,xxxxx 是芯片的型号或系列。但
这个文档不适合初学者。
实践证明,至少对于 C2000 系列的2407 和2812 而言,存储单元的单位是“字
word”,即16bit。但TI 的文档却说是“字节byte”,应当是TI 写错了。
要特别注意以下几点:
1、必须在DSP 芯片的空间分配的架构体系以内,分配所有的存储器。这里举两个
例子:
a、对于2407,程序空间和数据空间都是从地址0x0000 到0xFFFF,最大数
值是四个F,共64K 字范围。所以,2407 的CMD 文件中不能出现五位数的地址,也不允
许任何一个小块空间的地址范围覆盖到64K 以外的区域,因为2407 根本就无法控制这些
区域,或者说不能访问、无法寻址。要注意,起始地址和长度不要算错了。2812 也有同样
的问题。
b、2407 的数据空间里,0x0100~0x01FF 和其他几块区域,是TI 声明的保留
空间(Reserved 或illegal),也是芯片无法访问的,分配资源的时候不能涉及到这些区域。
同样地,2812 的程序空间和数据空间,都有大片的保留区域,不能使用。2、每个小块的空间,必须是一片连续的区域。因为,编译器在使用这块区域的时
候,默认它是连续的,而且每个存储单元都是可用的。
3、同一空间下面,任何两个小块之间,不能有任何的相互覆盖和重叠。
在外扩存储器时,要保证片外的存储空间之间,特别是片外与片内的存储空间之间,
不要发生冲突。有些空间,已经被DSP 芯片的内部存储器占用了,用户是不可更改的,
或只能通过模式配置,在一定范围内改动,用户自行扩展存储器时,要避开这些地方。
4、用户所声明的空间划分情况,必须与用户电路板的实际情况相符合!
对于用户自制的电路板,这是很容易出错的地方,通常会出现两种错误:
a、在设计硬件电路的时候,通常用CPLD 作为片外存储器的选通信号,用
verilog 或者VHDL 进行编程;也有用74 或4000 系列芯片来搭建的,已经很少了。如果
CPLD 逻辑出错,或者逻辑并没有真正写入CPLD 芯片里面,即使CMD 文件是正确的,
即使编译已经通过,在仿真下载或者烧写的时候,PC 机都会报错而无法继续操作。
b、电路板有虚焊的地方,主要发生在DSP 芯片的管脚、电平转换芯片的管脚,及片外存储器的管脚上。这种情况,效果等同于上面所说的CPLD 逻辑错误。更要命的是,
补焊一次、两次甚至几次,虚焊仍然存在,这最容易把人搞糊涂了。笔者就经常遇到这样
的事情。
出现这些硬件错误时,初学者往往不能正确地对故障作出定位,一会儿认为 CMD
文件有问题,一会儿觉得硬件电路有问题,反复地折腾,最后陷入迷茫。这时,一定要保
持清醒的头脑:先检查原理设计;再检查硬件电路板,保证逻辑正确,焊接可靠;最后再
去检查CMD 文件。
5、一般地,初学者会找一些现成的CMD 文件来用,一点改动都不敢。其实,胆
子可以大一些,改一改,试一试,没什么大不了的。想学会游泳,必须要下水。DSP 芯片
上的存储器,只要没有被TI 用作专门的用途,用户都可以全权支配。空间的划分,是由用
户决定的,可以根据需要,甚至个人的喜好来划分,名称也可以随意起,和C 语言的变量
名一样。
这里应当举一个 CMD 文件资源声明的例子,但为时过早。资源声明常常与资源分
配是密切相关的,笔者把例子放在下一节,与资源分配一起详细说明,效果会好一些。

相关帖子

沙发
airwill| | 2017-4-25 13:09 | 只看该作者
现在的 CMD 文件, IDE 已经做得比较好了, 基本都不用去修改了
支持一下楼主的资料.

使用特权

评论回复
板凳
xyz549040622| | 2017-4-25 20:13 | 只看该作者
除非是自己写boot或者操作内存,cmd文件基本也是不用修改了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

19

帖子

0

粉丝