打印
[内存映射]

命令文件.cmd 中如何确定程序空间和数据空间的起始地址和大

[复制链接]
3296|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ttxs_2013|  楼主 | 2013-12-10 13:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想知道如何确定存储器配置文件.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 | 只看该作者
就是安装下面存储器写的

使用特权

评论回复
板凳
ttxs_2013|  楼主 | 2013-12-10 18:38 | 只看该作者
zhangmangui 发表于 2013-12-10 16:00
就是安装下面存储器写的

能否解释详细点,书上也是这么写的,但是没有配合相应的例子进行解释,仍然一头雾水。

使用特权

评论回复
地板
zhangmangui| | 2013-12-10 23:46 | 只看该作者
ttxs_2013 发表于 2013-12-10 18:38
能否解释详细点,书上也是这么写的,但是没有配合相应的例子进行解释,仍然一头雾水。 ...

也就是从DARAM起始地址开始存  也就是8000
再将那些段分配到page中  
还需你慢慢研究

使用特权

评论回复
5
ttxs_2013|  楼主 | 2013-12-11 08:51 | 只看该作者
好,谢谢啦  我大概知道思路了,再研究研究。

使用特权

评论回复
6
dong00520| | 2013-12-11 10:02 | 只看该作者
看了,不明白

使用特权

评论回复
7
sywh| | 2013-12-30 17:07 | 只看该作者
学习

使用特权

评论回复
8
xzhihui| | 2013-12-31 13:49 | 只看该作者
你的红色字体部分有问题哦,内存分配最好不要重叠,注意起始地址,长度。
关于内存的映射,你看看这段代码:

   /*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 */

使用特权

评论回复
9
xzhihui| | 2013-12-31 13:53 | 只看该作者
上面那么是比较详细的分配地址,简单点的就是如下:
MEMORY {
   PAGE 0:     VECT:     origin = 0x4dc00, len = 0x100
   PAGE 0:     DARAM:    origin = 0xc0, len = 0xfe40
   PAGE 0:     SARAM:    origin = 0x10000, len = 0x3dc00
}

使用特权

评论回复
10
ttxs_2013|  楼主 | 2013-12-31 21:03 | 只看该作者
xzhihui 发表于 2013-12-31 13:53
上面那么是比较详细的分配地址,简单点的就是如下:
MEMORY {
   PAGE 0:     VECT:     origin = 0x4dc00, ...

查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为什么长度是那么多,换成别的行不行,如果是换成自己编写的话,我该怎么考虑这个长度……  问了个师兄,他说不需要管长度。只有长度没有超过这个内存空间就行 ,是这样考虑吗?我不知道这个问题到底有多少人明白,但我感觉挺重要的,所以一直想弄清楚,可能脑子不好使,没想明白,也可能就是书上真的没讲清楚。请教了

使用特权

评论回复
11
玄德| | 2013-12-31 21:21 | 只看该作者
12
xzhihui| | 2014-1-2 18:42 | 只看该作者
本帖最后由 xzhihui 于 2014-1-2 18:48 编辑
ttxs_2013 发表于 2013-12-31 21:03
查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为 ...

设置合适的长度,简单的方法:
先设置最大长度,然后查看你编译后的map文件,看实际使用长度是多少,然后再设置最合适的长度。
不过, 我没觉得很重要。
简单的例子:
         name            origin    length      used     unused   attr    fill
                        (bytes)   (bytes)    (bytes)   (bytes)
----------------------  --------  ---------  --------  --------  ----  --------
  DARAM                 000000c0   0000fe40  0000cf6c  00002ed4  RWIX
  SARAM                 00010000   0003dc00  0003c7f8  00001408  RWIX
  VECT                  0004dc00   00000100  00000100  00000000  RWIX

刚刚看了下楼上的帖子,讲的很好!楼上高人!

使用特权

评论回复
13
xzhihui| | 2014-1-2 18:43 | 只看该作者
ttxs_2013 发表于 2013-12-31 21:03
查了很多资料,也看了一些内存分配的例子,但是都是只说是什么,没说为什么,其实我想知道的是为什么。为 ...

想要详细的内存分配,就仔细看MAP文件吧,每个变量都会有起始地址和占有空间长度

使用特权

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

本版积分规则

31

主题

125

帖子

4

粉丝