嵌入式系统 分散加载功能

1.分散加载描述是将代码和数据与最适合的内存类型进行匹配(例如,可以将中断代码放入快速SRAM中以改善中断响应时间,但不常使用的配置信息可能会放入较慢的闪存中。)

2.用符号来标识堆和堆栈

ARM ® C库提供了函数的多个实现 __user_setup_stackheap(),可以通过分散文件中给出的信息自动选择正确的给你

若要指定 只能在ARM_LIB_STACK  及ARM_LIB_HEAP 中定义。

LOAD_FLASH …
{
    …
    ARM_LIB_STACK 0x40000 EMPTY -0x20000  ; Stack region growing down
    { }
    ARM_LIB_HEAP 0x28000000 EMPTY 0x80000 ; Heap region growing up
    { }
    …
}

 

3.内存映射外设

4.功能在一个恒定的位置

 

将目标文件中的段加载到内存中

LOAD_ROM 0x0000 0x8000; 负荷区域(LOAD_ROM)的名称,
                             ; 开始地址为负载区域(0×0000),
                             ; 最大加载区大小(0x8000)
{ 
    EXEC_ROM 0x0000 0x8000; 第一EXEC区域(EXEC_ROM)的名称,
                             ; 对于EXEC区域(0×0000)开始的地址,
                             ; 第一个exec区域的最大大小(0x8000)
    { 
        *(+ RO); 将所有代码和RO数据放入
                             ; 这个exec区域
    } 
    SRAM 0x10000 0x6000; 第二个exec区域(SRAM)的名称,
                             ; 第二个exec区域的起始地址(0x10000),
                             ; 第二个exec区域的最大大小(0x6000)
    { 
        *(+ RW,+ ZI); 将所有RW和ZI数据放入
                             ; 这个exec地区
    } 
}

将program1.o和program2.o 文件中的段加载到内存中:

LOAD_ROM_1 0x0000; 第一个加载区的起始地址(0x0000)
{
    EXEC_ROM_1 0x0000; 第一个exec区域的起始地址(0x0000)
    {
        program1.o(+ RO); 放置所有代码和RO数据
                               ; program1.o进入这个exec区域
    }
    DRAM 0x18000 0x8000; 该exec区域的起始地址(0x18000),
                               ; 此exec区域的最大大小(0x8000)
    {
        program1.o(+ RW,+ ZI); 放置所有RW和ZI数据
                               ; program1.o进入这个exec区域
    }
}
LOAD_ROM_2 0x4000; 第二个加载区的起始地址(0x4000)
{
    EXEC_ROM_2 0x4000
    {
        program2.o(+ RO); 放置所有代码和RO数据
                               ; program2.o进入这个exec区域
    }
    SRAM 0x8000 0x8000
    {
        program2.o(+ RW,+ ZI); 放置所有RW和ZI数据
                               ; program2.o进入这个exec区域
    }
}

如果要连接其他的模块 需要使用* 或.ANY 说明符来放置其余的代码和数据

 

 

scatter 文件链接到二进制

 

FLASH_LOAD 0x20000000 
{ 
  RW 0x20000000; 位带区域起始处的RW数据
  { 
    *(+ RW-DATA)
  } 
  RO +0 FIXED; 其次是RO数据
  { 
     *(+ RO-DATA)
  } 
  CODEDATA +0; 其他一切都是
  { 
    *(+ RO-CODE)
    *(+ ZI); ZI在
  } 
  ARM_LIB_HEAP +0 EMPTY 0x10000 之后直接跟随; 堆启动之后
  { 
  } 
  ARM_LIB_STACK 0x20100000 EMPTY -0x10000; 堆栈开始于
                                             ; 位带区域顶部
  { 
  } 
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢娘蓝桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值