lpc2210平台运行时一个奇怪的问题!!
C:\Documents and Settings\Owner\桌面\skyeye出错.jpg我尝试将armcc版本的ucos for lpc移植到skyeye的lpc2210平台上,其他的修改工作都已经完成了,但是在最后用skyeye -e start运行我的执行文件时,总是碰到这样的问题:
SKYEYE: mem_reset: Error allocating mem for bank number 1.
这个应该跟skyeye.conf文件配置情况无关吧,我看了skyeye源代码中的armmem.c文件,其中有如下语句:
state->mem.rom = malloc (mb.len);
if (!state->mem.rom) {
fprintf (stderr,
"SKYEYE: mem_reset: Error allocating mem for bank number %d.\n",bank);
skyeye_exit (-1);
}
也就是说当malloc申请不成功的时候才会显示这个错误,但是为什么会申请空间不成功呢??这个错误跟什么有关呢?请大家指教一下!!附我的skyeye.conf如下:
#skyeye config file sample
cpu: arm7tdmi
mach: lpc2210
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00040000 ,boot=yes
#mem_bank: map=M, type=RW, addr=0x00040000, size=0x3ffb0000
mem_bank: map=M, type=RW, addr=0x40000000, size=0x40000000,
#mem_bank: map=M, type=RW, addr=0x80000000, size=0x60000000
mem_bank: map=I, type=RW, addr=0xe0000000, size=0x20000000
#log: logon=0, logfile=/tmp/sk1.log, start=0, end=200000
这说明当 你的memory bank什么意思?
mem_bank: map=M, type=RW, addr=0x40000000, size=0x40000000,
起始地址是0x4000_0000, 大小为0x4000_0000 ?? 是我的skyeye.conf配置有误吗?起始地址0x40000000开始是LPC2210内存映像的16K静态RAM,0x40001FFF到0x80000000是片内存储器用,所以我把它们都分配在一起了,所以是0x4000000长度啊,应该没有问题吧?? 我刚刚将Size=0x40000000改为了Size=0x00004000就没有出现那个错误了,难道还真是大小配置得太大了??我对skyeye.conf对mem_bank的配置有点糊涂了,它的分配原则是什么呢?是按照具体的CPU类型中所定义的内存映射去分配吗,还是说要根据实际所要用的空间去分配? 刚刚mem_bank的问题没有了,但是又出现新的问题了:
elf_checkFile failed: -1
load "start" error
这又是为什么呢?难道不识别flt格式的执行文件吗?因为为了避免__CTOR_LIST和__DROP_LIST未定义错误,我在编译时是加上了-elf2flt选项的.. 报告一下,昨天遇到的__CTOR_LIST问题是由于在main.c文件里面定义了main函数,gcc可能会对main函数做特殊处理,可能需要用到libgcc.a,所以才会出现那个问题,后来我把main改了名字就不会出问题了!现在我的可执行文件可以生成了,但是在用skyeye运行时又出问题了:
R 0,0,63,e000c000,0,0,0,0,0,0,0,0,6122,6122,e0024080,e002558c,C 600000df,S 0,0,0,0,0,0,0,M 1f,B 0,E 0,I 0,P 0,T 0,L 0,D 0,ERROR:io_read: addr = e0025590
R 0,0,63,e000c000,0,0,0,0,0,0,0,0,6122,6122,e0024080,e0025590,C 600000df,S
一大串类似的错误,但是我很奇怪,我的程序里面根本就没有读过地址0xe0024080等,不知是哪来的错误
页:
[1]