请教CMD文件Memory配置的疑问
我用的是TMS320LF2407A dsp, 在配置CMD文件时遇到如下问题,感到困惑, 请大家指教。
我的CMD文件如下,
/* LF2407 CMD */
MEMORY { PAGE 0: VECS: origin = 0x8000, length 0x040 PROG: origin = 0x8860, length 0x6000 PAGE 1: B0 : origin = 0x200, length 0x100 B1 : origin = 0x300, length 0x100 DATA: origin = 0x0803, len=0x600 /* My question is here */ }
SECTIONS { .vectors : {}>VECS PAGE 0 /* 中断向量表 */ .text : {}>PROG PAGE 0 /* 可执行代码和字符串 */ .cinit : {}>PROG PAGE 0 .bss : {}>DATA PAGE 1 /* 保留全局变量和静态变量空间 */ .const : {}>DATA PAGE 1 /* 字符串和switch表 */ .switch : {}>PROG PAGE 0 /* 包含.switch语句建立的表格 */ .stack : {}>DATA PAGE 1 /* 为系统堆栈分配存储器 */ .system : {}>DATA PAGE 1 /* 为动态存储器函数分配存储器空间 */
}
我的问题是在DATA: origin = 0x0803, len=0x600 这一行。 当origin = 0x0800时,或时origin = 0x0801时,程序可以执行。但是当origin = 0x0803时,程序运行就有问题,可以运行,但今不了中断,我不知是什么原因。
我把.bss : {}>DATA PAGE 1 后面加上 align 16 就可以正常运行了。让开始的地址开始于16的整数倍就没问题了。
origin = 0x0803 这一语句是不是可以将开始地址定义在任一memory 单元?
请大家指教一些,非常感谢!
|