打印
[ZLG-ARM]

关于分散加载的问题(SmartARM2300)急!

[复制链接]
2504|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZorroCN|  楼主 | 2010-3-19 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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)
除此之外,还有一个问题,请问是否可以通过编写分散加载文件,把某个函数的首地址编译到一个固定的地址上去,然后通过指向该固定地址的函数指针来访问?

相关帖子

沙发
ZorroCN|  楼主 | 2010-3-19 14:09 | 只看该作者
LPC2378
uip.o(+RO)
telnetd.o(+RO)
timer.o(+RO)
uip_arp.o(+RO)

clock-arch.o(+RO)
emac.o(+RO)
shell.o(+RO)
memb.o(+RO)
psock.o(+RO)
这几个都是uip协议栈及telnet支持部分,IAP模块暂时没有调用。后面那三个app开头的模块是给应用层提供的几个接口,这个工程里面只有几个空函数。
另外,把上面那个分散加载修改成如下,则不能生成hex,只能以plain binary格式编译成两个无后缀的文件,并且在用H-JTAG烧录的时候,两者均提示无法格式化扇区(实际上单独擦除flash的时候是可以正常擦除的)

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)
        
        _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 0x00038000
{
    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)
    }
}

使用特权

评论回复
板凳
午夜粪车| | 2010-3-21 12:52 | 只看该作者
看不懂……

使用特权

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

本版积分规则

29

主题

84

帖子

0

粉丝