数组放到flash中的问题和疑惑
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, 取出来也是对的..
请问你那个load=后面那块地址是要指向片内的flash么?flash地址是多少呢?我看我用的5416好像flash地址和外扩ram是重合的,我就不知道怎么设置段了
外扩ram后,内部的flash就不能用了..
只是pdf中那些 extenmal段可以在cmd中设定
哦,这样啊,谢谢哈,那我这么做的话,不是不能用const将数组存到flash啦?外部的也不行么
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 最后编辑 ]
那个gel文件用什么呢,需要自己修改么