SmartARM2300开发板上面(ADS1.2),移植了uip协议栈并做了个简单的telnet服务器,用周公模板的分散加载文件,能正常运行,但修改了分散加载文件之后,程序连main函数都进不了,H-JTAG跟踪的时候在main之前就dataabort了,具体分散加载文件如下:
ROM_LOAD 0x0
{
ROM_EXEC 0x00000000 ;0x00038000
{
Startup.o (vectors, +First)
__main.o(+RO)
main.o(+RO)
irq.o(+RO)
target.o(+RO)
uip.o(+RO)
IAP.o(+RO)
telnetd.o(+RO)
timer.o(+RO)
uip_arp.o(+RO)
clock-arch.o(+RO)
emac.o(+RO)
shell.o(+RO)
psock.o(+RO)
memb.o(+RO)
;//以下这些是根据加上去的,并非工程里面的模块,包括上面的那个__main.o,也是编译出错,根据报警加的。
_no_redirect.o(+RO)
rt_memclr.o(+RO)
rt_memcpy.o(+RO)
rt_memcpy_w.o(+RO)
rt_memset.o(+RO)
stkheap2.o(+RO)
strlen.o(+RO)
strncmp.o(+RO)
strncpy.o(+RO)
use_no_semi.o(+RO)
kernel.o(+RO)
libspace.o(+RO)
rt_memclr_w.o(+RO)
exit.o(+RO)
lib_init.o(+RO)
fpinit.o(+RO)
rt_fp_status_addr.o(+RO)
anon$$obj.o(+RO)
;* (+RO)
}
ROM_APP_USER 0x00038000 0x00010000
{
app.o(+RO)
}
ROM_APPCY 0x00048000 0x00008000
{
appcy.o(+RO)
}
ROM_APPNET 0x00050000 0x00008000
{
appnet.o(+RO);//
}
IRAM 0x40000000
{
Startup.o (MyStacks)
* (+RW,+ZI)
}
HEAP +0 UNINIT
{
Startup.o (Heap)
}
STACKS_BOTTOM +0
{
Startup.o (StackBottom)
}
STACKS 0x40008000 UNINIT ;for LPC2366/68/78
; STACKS 0x40002000 UNINIT ;for LPC2364
{
Startup.o (HeapTop)
Startup.o (Stacks)
}
}
整个工程并不大,似乎留的空间应该够用。
Total RO Size(Code + RO Data) 17695 ( 17.28kB)
Total RW Size(RW Data + ZI Data) 12040 ( 11.76kB)
Total ROM Size(Code + RO Data + RW Data) 17763 ( 17.35kB)
除此之外,还有一个问题,请问是否可以通过编写分散加载文件,把某个函数的首地址编译到一个固定的地址上去,然后通过指向该固定地址的函数指针来访问? |