[讨论] [求助]数组放到flash中的问题和疑惑

王小龙   2008-7-24 02:38 楼主


TI 的2407
看网上的帖子..说要把const的数组放到flash中..必须在cmd设定
        .const   : load=  PROG      PAGE 0, run = SARAM PAGE 1
        {
                __const_run=.;
                *(c_mark)
                *(.const)
                __const_length = .-__const_run;
        }
并且 boot.asm哪里 必须设置一个 1

我按照步骤做了..是可以把const char[]=\"asdf\"之类的放到flash中..
但是还 有一些问题..想请教一下..

问题一:
const 放到flash中.运行的时候是在ram中..那么这样做.是不是意味这.
这些数组在rom和ram中同时在用了空间...
如果是..那么把数组定义在rom中的 意义何在...

问题二:

rts.src中定义了__const_run, 但是 __const_run=. 后面的 \".\"和
. - __const_run中的\".\" 就代表const启动地址??
如果是__const_length = .-__const_run; 两个想减不是0了吗?

另外 (.c_mark)  rts.src中有使用过..
但是为什么用(c_mark)没有 \".\"呢
而且cmd文件中好像没有分配这些空间..这些东西编译器自动分配????

问题三:
        .const   : load=  PROG      PAGE 0, run = SARAM PAGE 1
        {
                __const_run=.;
                *(c_mark)
                *(.const)
                __const_length = .-__const_run;
        }
{}中的东西 那位大哥能不能详细讲一下..
只知道 *(.const) 把const文件分配到这段..其他的起始什么的有什么用
load =PROG 和RUN = SARAM不是已经定位了吗??
另外我把{}里面的东西删除了好像 也能把数组放到rom, 取出来也是对的.. 本帖最后由 dontium 于 2015-1-23 13:33 编辑

回复评论 (5)



请问你那个load=后面那块地址是要指向片内的flash么?flash地址是多少呢?我看我用的5416好像flash地址和外扩ram是重合的,我就不知道怎么设置段了 本帖最后由 dontium 于 2015-1-23 13:33 编辑
点赞  2008-7-24 04:34
外扩ram后,内部的flash就不能用了..
只是pdf中那些 extenmal段可以在cmd中设定
点赞  2008-7-24 05:29
哦,这样啊,谢谢哈,那我这么做的话,不是不能用const将数组存到flash啦?外部的也不行么
点赞  2008-7-24 06:53
MEMORY
{
        PAGE 0: RAM1:   origin=0x18000, len=0x7f80
                       
                        RAM2:   origin=0x28000, len=0x7f80
                        VECT:        origin=0x2FF80, len=0x0080
                        RAM3:   origin=0x38000, len=0x7f80
                       
                        PROG:        o=0x7f00, len=0x0100
                                                                       
        PAGE 1: SCRATCH: origin=0x60,         len=0x20
                        ONCHIP:         origin=0x80,   len=0x7e80
                        OFFCHIP: origin=0x8000, len =0x8000
                       
}


SECTIONS
{

    .text:  load=RAM2 PAGE(0)
        .vectors: load=VECT PAGE(0)
       
        .const: load=PROG PAGE(0), run=ONCHIP PAGE(1)
               {
                __const_run=.;
                *(.c_mark)
                *(.const)
                __const_length=.-__const_run;
               }
        .stack: load=ONCHIP PAGE(1)
        .sysmem: load=ONCHIP PAGE(1)
       
        .bss:  load=ONCHIP PAGE(1)
        .data: load=ONCHIP PAGE(1)
        }

这样有没有什么不对的?目前我的系统完全不能处理浮点数,连赋值都不行

[ 本贴由 colorsky 于 2007-7-25 02:55 PM 最后编辑 ]
点赞  2008-7-24 06:55
那个gel文件用什么呢,需要自己修改么
点赞  2008-7-24 08:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复