2781|1

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

分散加载文件如何批量使用? [复制链接]

我的一个工程中,大概有20多个.c文件的模块,我想将其中的一部分,比如其中的12个.c模块在编译后希望通过分散加载文件指定连接器将其定位在FLASH中0x00000000到地址0x00032000,然后另外的都定位在FLASH 的地址0x00040000-0x00078000,
请问如何通过分散加载文件实现?

我的目的是想升级后面一块区域的文件,而前面的文件可以固定不变,作为升级区和资源区。

最新回复

原来要一个一个自己写,类似: OS_LOAD 0x00000000         ABSOLUTE {         BOOT 0x00000000         {                                                                 ;中断向量表                 vectors.o (VECT, +First)         init.o (INIT)         }         ROM_EXEC1 +0         {            __main.o(+RO)         __scatter.o (+RO)         __scatter_zi.o(+RO)         __dczerorl.o(+RO)         anon$$obj.o(+RO)         __scatter_copy.o(+RO)         cpu_a.o (+RO)         iap.o (+RO)         ;init.o (+RO)         lib_mem.o (+RO)         lib_        mem_a.o (+RO)         ;lib_str.o (+RO)         net.o (+RO)         net_arp.o (+RO)         net_ascii.o (+RO)         net_bsd.o (+RO)         net_bsp.o (+RO)         net_buf.o (+RO)         net_conn.o (+RO)         net_ctr.o (+RO)         net_dbg.o (+RO)         ;net_err.o (+RO)         net_icmp.o (+RO)         net_if.o (+RO)         net_if_pkt.o (+RO)         net_ip.o (+RO)         net_isr.o (+RO)         net_nic.o (+RO)         net_os.o (+RO)         net_phy.o (+RO)         net_sock.o (+RO)         net_stat.o (+RO)         net_tcp.o (+RO)         net_tmr.o (+RO)         net_udp.o (+RO)         net_util.o (+RO)         net_util_a.o (+RO)         os_core.o (+RO)         os_cpu_a.o (+RO)         os_cpu_c.o (+RO)         os_dbg.o (+RO)         ;os_dbg_r.o (+RO)         os_flag.o (+RO)         os_mbox.o (+RO)         os_mem.o (+RO)         ;os_mutex.o (+RO)         os_q.o (+RO)         os_sem.o (+RO)         os_task.o (+RO)         os_time.o (+RO)         ;os_tmr.o (+RO)         ;ucos_ii.o (+RO)         upgrade.o (+RO)         ;vectors.o (+RO)         bsp.o (+RO)         ;app.o (+RO)         strncmp.o (+RO)         lib_mem_a.o(+RO)         libshutdown2.o(+RO)         rtexit2.o (+RO)         use_no_semi.o  (+RO)         sys_exit.o (+RO)         fpinit.o (+RO)         libinit2.o (+RO)         rtexit.o (+RO)         libinit.o (+RO)         exit.o (+RO)         rtentry7.o (+RO)         rtentry2.o (+RO)         rt_memclr.o        (+RO)         rtentry.o (+RO)         aeabi_sdiv.o (+RO)         aeabi_sdiv.o (+RO)         rt_memclr_w.o (+RO)         rt_memcpy_w.o (+RO)         aeabi_memset.o (+RO)         libshutdown.o (+RO)         __0sscanf.o (+RO)         _scanf_int.o(+RO)         strstr.o(+RO)         _chval.o(+RO)         scanf_char.o(+RO)         _sgetc.o(+RO)         isspace.o(+RO)         _scanf.o(+RO)         rt_ctype_table.o(+RO)         rt_locale_intlibspace.o(+RO)         lc_ctype_c.o(+RO)         strcmp.o (+RO)         _scanf_int.o  (+RO)         _scanf.o (+RO)         setlocale.o(+RO)         locale.o(+RO)         null_locale.o(+RO)                 bootloader.o(+RO)         bootwebupgrade.o(+RO)         ;app.o(+RO)         ;webupgrade.o(+RO)         }         RW_IRAM1 0x40000000 0x00007000     {                 * (+RW,+ZI)                     }         ARM_LIB_HEAP  0x40007000 EMPTY  0x00000100   {}     ARM_LIB_STACK 0x40008000 EMPTY -0x00000E00   {}                 RW_IRAM3 0x80000000         {                 ;                webupgrade.o (+RW,+ZI)                 ;upgrade.o (+RW,+ZI)         }          RW_IRAM2 0x7fd00000 0x1fff         {            webupgrade.o (+RW,+ZI)                 bootloader.o (+RW,+ZI)         } } APP_LOAD 0x00040000   {         MAIN_EXE +0         {                 app.o(mymain) ;;app.o就是我的main主函数所在的C文件模块app.c                       ;;mymain就是刚才定义的一个节其实就是代表main主函数                       ;;这里可以看到mymain的节(也就是main函数)                       ;;被放在地址0x00050000处,这样就完成了函数地址定位的功能         }         APP_EXE +0         {                  *(+RO)                 ;webupgrade.o (+RO)                         }                           }  详情 回复 发表于 2009-8-29 15:42
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
原来要一个一个自己写,类似:

OS_LOAD 0x00000000         ABSOLUTE
{
        BOOT 0x00000000
        {                                                                 ;中断向量表
                vectors.o (VECT, +First)
        init.o (INIT)
        }

        ROM_EXEC1 +0
        {
           __main.o(+RO)
        __scatter.o (+RO)
        __scatter_zi.o(+RO)
        __dczerorl.o(+RO)
        anon$$obj.o(+RO)
        __scatter_copy.o(+RO)

        cpu_a.o (+RO)
        iap.o (+RO)
        ;init.o (+RO)
        lib_mem.o (+RO)
        lib_        mem_a.o (+RO)
        ;lib_str.o (+RO)
        net.o (+RO)
        net_arp.o (+RO)
        net_ascii.o (+RO)
        net_bsd.o (+RO)
        net_bsp.o (+RO)
        net_buf.o (+RO)
        net_conn.o (+RO)
        net_ctr.o (+RO)
        net_dbg.o (+RO)
        ;net_err.o (+RO)
        net_icmp.o (+RO)
        net_if.o (+RO)
        net_if_pkt.o (+RO)
        net_ip.o (+RO)
        net_isr.o (+RO)
        net_nic.o (+RO)
        net_os.o (+RO)
        net_phy.o (+RO)
        net_sock.o (+RO)
        net_stat.o (+RO)
        net_tcp.o (+RO)
        net_tmr.o (+RO)
        net_udp.o (+RO)
        net_util.o (+RO)
        net_util_a.o (+RO)
        os_core.o (+RO)
        os_cpu_a.o (+RO)
        os_cpu_c.o (+RO)
        os_dbg.o (+RO)
        ;os_dbg_r.o (+RO)
        os_flag.o (+RO)
        os_mbox.o (+RO)
        os_mem.o (+RO)
        ;os_mutex.o (+RO)
        os_q.o (+RO)
        os_sem.o (+RO)
        os_task.o (+RO)
        os_time.o (+RO)
        ;os_tmr.o (+RO)
        ;ucos_ii.o (+RO)
        upgrade.o (+RO)
        ;vectors.o (+RO)
        bsp.o (+RO)
        ;app.o (+RO)
        strncmp.o (+RO)
        lib_mem_a.o(+RO)
        libshutdown2.o(+RO)
        rtexit2.o (+RO)
        use_no_semi.o  (+RO)
        sys_exit.o (+RO)
        fpinit.o (+RO)
        libinit2.o (+RO)
        rtexit.o (+RO)
        libinit.o (+RO)
        exit.o (+RO)
        rtentry7.o (+RO)
        rtentry2.o (+RO)
        rt_memclr.o        (+RO)
        rtentry.o (+RO)
        aeabi_sdiv.o (+RO)
        aeabi_sdiv.o (+RO)
        rt_memclr_w.o (+RO)
        rt_memcpy_w.o (+RO)
        aeabi_memset.o (+RO)
        libshutdown.o (+RO)
        __0sscanf.o (+RO)
        _scanf_int.o(+RO)
        strstr.o(+RO)
        _chval.o(+RO)
        scanf_char.o(+RO)
        _sgetc.o(+RO)
        isspace.o(+RO)
        _scanf.o(+RO)
        rt_ctype_table.o(+RO)
        rt_locale_intlibspace.o(+RO)
        lc_ctype_c.o(+RO)
        strcmp.o (+RO)
        _scanf_int.o  (+RO)
        _scanf.o (+RO)
        setlocale.o(+RO)
        locale.o(+RO)
        null_locale.o(+RO)
       
        bootloader.o(+RO)
        bootwebupgrade.o(+RO)

        ;app.o(+RO)
        ;webupgrade.o(+RO)
        }
        RW_IRAM1 0x40000000 0x00007000
    {
                * (+RW,+ZI)
               

    }

        ARM_LIB_HEAP  0x40007000 EMPTY  0x00000100   {}
    ARM_LIB_STACK 0x40008000 EMPTY -0x00000E00   {}
       
        RW_IRAM3 0x80000000
        {
               
;                webupgrade.o (+RW,+ZI)
                ;upgrade.o (+RW,+ZI)
        }

         RW_IRAM2 0x7fd00000 0x1fff
        {
           webupgrade.o (+RW,+ZI)
                bootloader.o (+RW,+ZI)
        }

}


APP_LOAD 0x00040000  
{
        MAIN_EXE +0
        {
                app.o(mymain) ;;app.o就是我的main主函数所在的C文件模块app.c
                      ;;mymain就是刚才定义的一个节其实就是代表main主函数
                      ;;这里可以看到mymain的节(也就是main函数)
                      ;;被放在地址0x00050000处,这样就完成了函数地址定位的功能

        }
        APP_EXE +0
        {
                 *(+RO)
                ;webupgrade.o (+RO)
               
        }
       
         
       
}
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表