命令文件.cmd 中如何确定程序空间和数据空间的起始地址和大
想知道如何确定存储器配置文件.cmd 中程序空间和数据空间的起始地址和大小?手上有两本资料,上面只是介绍.cmd文件中各部分表示的含义,这个讲的倒是挺清楚的,但是并没有说明在编写.cmd文件中用到的程序空间和数据空间具体的分配是怎么样的?也没有举例说明为什么?C5509数据手册没有讲存储器分配问题,只是从寻址的角度简单的说了下?比如
.cmd文件
-c
-o hello.out
-m hello.map
-stack 100
-l rts2xx.lib
MEMORY
{
PAGE 0: VECT:origin=0x8000,length 0x040 //其地址0x8000怎样确定的,长度0x4000又为什么是这么多?
PROG:origin=0x8040,length 0x6000
PAGE 1: DATA:origin=0x8000,length 0x400
}
SECTIONS
{
.vextors >VECT PAGE 0
.text >;PROG PAGE 0
.bss >DATA PAGE 1
.const >DATA PAGE 1
}
还有,为什么C54系列是独立的程序/数据空间,反而C55系列则是统一的空间?
就是安装下面存储器写的
zhangmangui 发表于 2013-12-10 16:00 static/image/common/back.gif
就是安装下面存储器写的
能否解释详细点,书上也是这么写的,但是没有配合相应的例子进行解释,仍然一头雾水。 ttxs_2013 发表于 2013-12-10 18:38 static/image/common/back.gif
能否解释详细点,书上也是这么写的,但是没有配合相应的例子进行解释,仍然一头雾水。 ...
也就是从DARAM起始地址开始存也就是8000
再将那些段分配到page中
还需你慢慢研究 好,谢谢啦我大概知道思路了,再研究研究。 看了,不明白 学习 你的红色字体部分有问题哦,内存分配最好不要重叠,注意起始地址,长度。
关于内存的映射,你看看这段代码:
/*Program Space*/
/* DARAM */(起始地址,程序/数据,长度,,读写属性)
GEL_MapAdd(0x0000C0,0,0x001F40,1,1); /* DARAM0 */
GEL_MapAdd(0x002000,0,0x002000,1,1); /* DARAM1 */
GEL_MapAdd(0x004000,0,0x002000,1,1); /* DARAM2 */
GEL_MapAdd(0x006000,0,0x002000,1,1); /* DARAM3 */
GEL_MapAdd(0x008000,0,0x002000,1,1); /* DARAM4 */
GEL_MapAdd(0x00A000,0,0x002000,1,1); /* DARAM5 */
GEL_MapAdd(0x00C000,0,0x002000,1,1); /* DARAM6 */
GEL_MapAdd(0x00E000,0,0x002000,1,1); /* DARAM7 */
/* SARAM */
GEL_MapAdd(0x010000,0,0x002000,1,1); /* SARAM0 */
GEL_MapAdd(0x012000,0,0x002000,1,1); /* SARAM1 */
GEL_MapAdd(0x014000,0,0x002000,1,1); /* SARAM2 */
GEL_MapAdd(0x016000,0,0x002000,1,1); /* SARAM3 */
GEL_MapAdd(0x018000,0,0x002000,1,1); /* SARAM4 */
GEL_MapAdd(0x01A000,0,0x002000,1,1); /* SARAM5 */
GEL_MapAdd(0x01C000,0,0x002000,1,1); /* SARAM6 */
GEL_MapAdd(0x01E000,0,0x002000,1,1); /* SARAM7 */
GEL_MapAdd(0x020000,0,0x002000,1,1); /* SARAM8 */
GEL_MapAdd(0x022000,0,0x002000,1,1); /* SARAM9 */
GEL_MapAdd(0x024000,0,0x002000,1,1); /* SARAM10 */
GEL_MapAdd(0x026000,0,0x002000,1,1); /* SARAM11 */
GEL_MapAdd(0x028000,0,0x002000,1,1); /* SARAM12 */
GEL_MapAdd(0x02A000,0,0x002000,1,1); /* SARAM13 */
GEL_MapAdd(0x02C000,0,0x002000,1,1); /* SARAM14 */
GEL_MapAdd(0x02E000,0,0x002000,1,1); /* SARAM15 */
GEL_MapAdd(0x030000,0,0x002000,1,1); /* SARAM16 */
GEL_MapAdd(0x032000,0,0x002000,1,1); /* SARAM17 */
GEL_MapAdd(0x034000,0,0x002000,1,1); /* SARAM18 */
GEL_MapAdd(0x036000,0,0x002000,1,1); /* SARAM19 */
GEL_MapAdd(0x038000,0,0x002000,1,1); /* SARAM20 */
GEL_MapAdd(0x03A000,0,0x002000,1,1); /* SARAM21 */
GEL_MapAdd(0x03C000,0,0x002000,1,1); /* SARAM22 */
GEL_MapAdd(0x03E000,0,0x002000,1,1); /* SARAM23 */
GEL_MapAdd(0x040000,0,0x002000,1,1); /* SARAM24 */
GEL_MapAdd(0x042000,0,0x002000,1,1); /* SARAM25 */
GEL_MapAdd(0x044000,0,0x002000,1,1); /* SARAM26 */
GEL_MapAdd(0x046000,0,0x002000,1,1); /* SARAM27 */
GEL_MapAdd(0x048000,0,0x002000,1,1); /* SARAM28 */
GEL_MapAdd(0x04A000,0,0x002000,1,1); /* SARAM29 */
GEL_MapAdd(0x04C000,0,0x002000,1,1); /* SARAM30 */
GEL_MapAdd(0x04E000,0,0x002000,1,1); /* SARAM31 */
/* External-Memory */
GEL_MapAdd(0x050000,0,0x7B0000,1,1); /* External-SDRAM */
GEL_MapAdd(0x800000,0,0x400000,1,1); /* External-Async */
GEL_MapAdd(0xC00000,0,0x200000,1,1); /* External-Async */
GEL_MapAdd(0xE00000,0,0x100000,1,1); /* External-Async */
GEL_MapAdd(0xF00000,0,0x0E0000,1,1); /* External-Async */
/* ROM */
GEL_MapAdd(0xFE0000,0,0x008000,1,0); /* SAROM0 */
GEL_MapAdd(0xFE8000,0,0x008000,1,0); /* SAROM1 */
GEL_MapAdd(0xFF0000,0,0x008000,1,0); /* SAROM2 */
GEL_MapAdd(0xFF8000,0,0x008000,1,0); /* SAROM3 */
/* Data Space */
/* DARAM */
GEL_MapAdd(0x000000,1,0x000060,1,1); /* MMRs */
GEL_MapAdd(0x000060,1,0x000FA0,1,1); /* DARAM0 */
GEL_MapAdd(0x001000,1,0x001000,1,1); /* DARAM1 */
GEL_MapAdd(0x002000,1,0x001000,1,1); /* DARAM2 */
GEL_MapAdd(0x003000,1,0x001000,1,1); /* DARAM3 */
GEL_MapAdd(0x004000,1,0x001000,1,1); /* DARAM4 */
GEL_MapAdd(0x005000,1,0x001000,1,1); /* DARAM5 */
GEL_MapAdd(0x006000,1,0x001000,1,1); /* DARAM6 */
GEL_MapAdd(0x007000,1,0x001000,1,1); /* DARAM7 */
/* SARAM */
GEL_MapAdd(0x008000,1,0x001000,1,1); /* SARAM0 */
GEL_MapAdd(0x009000,1,0x001000,1,1); /* SARAM1 */
GEL_MapAdd(0x00A000,1,0x001000,1,1); /* SARAM2 */
GEL_MapAdd(0x00B000,1,0x001000,1,1); /* SARAM3 */
GEL_MapAdd(0x00C000,1,0x001000,1,1); /* SARAM4 */
GEL_MapAdd(0x00D000,1,0x001000,1,1); /* SARAM5 */
GEL_MapAdd(0x00E000,1,0x001000,1,1); /* SARAM6 */
GEL_MapAdd(0x00F000,1,0x001000,1,1); /* SARAM7 */
GEL_MapAdd(0x010000,1,0x001000,1,1); /* SARAM8 */
GEL_MapAdd(0x011000,1,0x001000,1,1); /* SARAM9 */
GEL_MapAdd(0x012000,1,0x001000,1,1); /* SARAM10 */
GEL_MapAdd(0x013000,1,0x001000,1,1); /* SARAM11 */
GEL_MapAdd(0x014000,1,0x001000,1,1); /* SARAM12 */
GEL_MapAdd(0x015000,1,0x001000,1,1); /* SARAM13 */
GEL_MapAdd(0x016000,1,0x001000,1,1); /* SARAM14 */
GEL_MapAdd(0x017000,1,0x001000,1,1); /* SARAM15 */
GEL_MapAdd(0x018000,1,0x001000,1,1); /* SARAM16 */
GEL_MapAdd(0x019000,1,0x001000,1,1); /* SARAM17 */
GEL_MapAdd(0x01A000,1,0x001000,1,1); /* SARAM18 */
GEL_MapAdd(0x01B000,1,0x001000,1,1); /* SARAM19 */
GEL_MapAdd(0x01C000,1,0x001000,1,1); /* SARAM20 */
GEL_MapAdd(0x01D000,1,0x001000,1,1); /* SARAM21 */
GEL_MapAdd(0x01E000,1,0x001000,1,1); /* SARAM22 */
GEL_MapAdd(0x01F000,1,0x001000,1,1); /* SARAM23 */
GEL_MapAdd(0x020000,1,0x001000,1,1); /* SARAM24 */
GEL_MapAdd(0x021000,1,0x001000,1,1); /* SARAM25 */
GEL_MapAdd(0x022000,1,0x001000,1,1); /* SARAM26 */
GEL_MapAdd(0x023000,1,0x001000,1,1); /* SARAM27 */
GEL_MapAdd(0x024000,1,0x001000,1,1); /* SARAM28 */
GEL_MapAdd(0x025000,1,0x001000,1,1); /* SARAM29 */
GEL_MapAdd(0x026000,1,0x001000,1,1); /* SARAM30 */
GEL_MapAdd(0x027000,1,0x001000,1,1); /* SARAM31 */
/* External-Memory */
GEL_MapAdd(0x028000,1,0x3D8000,1,1); /* External-SDRAM */
GEL_MapAdd(0x400000,1,0x200000,1,1); /* External-Async */
GEL_MapAdd(0x600000,1,0x100000,1,1); /* External-Async */
GEL_MapAdd(0x700000,1,0x080000,1,1); /* External-Async */
GEL_MapAdd(0x780000,1,0x070000,1,1); /* External-Async */
/* ROM */
GEL_MapAdd(0x7F0000,1,0x004000,1,0); /* SAROM0 */
GEL_MapAdd(0x7F4000,1,0x004000,1,0); /* SAROM1 */
GEL_MapAdd(0x7F8000,1,0x004000,1,0); /* SAROM2 */
GEL_MapAdd(0x7FC000,1,0x004000,1,0); /* SAROM3 */
/* IO Space */
GEL_MapAdd(0x0000,2,0xFFFF,1,1); /* XPORT */ 上面那么是比较详细的分配地址,简单点的就是如下:
MEMORY {
PAGE 0: VECT: origin = 0x4dc00, len = 0x100
PAGE 0: DARAM: origin = 0xc0, len = 0xfe40
PAGE 0: SARAM: origin = 0x10000, len = 0x3dc00
} xzhihui 发表于 2013-12-31 13:53 static/image/common/back.gif
上面那么是比较详细的分配地址,简单点的就是如下:
MEMORY {
PAGE 0: VECT: origin = 0x4dc00, ...
查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为什么长度是那么多,换成别的行不行,如果是换成自己编写的话,我该怎么考虑这个长度……问了个师兄,他说不需要管长度。只有长度没有超过这个内存空间就行 ,是这样考虑吗?我不知道这个问题到底有多少人明白,但我感觉挺重要的,所以一直想弄清楚,可能脑子不好使,没想明白,也可能就是书上真的没讲清楚。请教了 https://bbs.21ic.com/forum.php?mod=viewthread&tid=129810
本帖最后由 xzhihui 于 2014-1-2 18:48 编辑
ttxs_2013 发表于 2013-12-31 21:03 static/image/common/back.gif
查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为 ...
设置合适的长度,简单的方法:
先设置最大长度,然后查看你编译后的map文件,看实际使用长度是多少,然后再设置最合适的长度。
不过, 我没觉得很重要。
简单的例子:
name origin length used unused attr fill
(bytes) (bytes) (bytes) (bytes)
-------------------------------------------------------------------
DARAM 000000c0 0000fe400000cf6c00002ed4RWIX
SARAM 00010000 0003dc000003c7f800001408RWIX
VECT 0004dc00 000001000000010000000000RWIX
刚刚看了下楼上的帖子,讲的很好!楼上高人! ttxs_2013 发表于 2013-12-31 21:03 static/image/common/back.gif
查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为 ...
想要详细的内存分配,就仔细看MAP文件吧,每个变量都会有起始地址和占有空间长度
页:
[1]