scatter 文件语法

来源:互联网 发布:sql中replace函数用法 编辑:程序博客网 时间:2024/05/20 13:14

scatter file文件可以灵活的分配可执行文件中各文件链接的位置,甚至具体到各.o文件的ro rw 内容的具体连接位置。更加具体的可以看上一篇的内容

scatterfile的语法不是很复杂,这里通过两个实例来介绍下,第一个实例算是一个最简单的分配

1 简单的内存映射
MEMORY 0x0000 0x8000
{
       ROM 0x0000 0x8000
       {
       *(+RO)
       }
      RAM 0x10000 0x6000
      {
       *(+RW, +ZI)
      }
}
MEMORY(下载区域名称) 0x0000(下载区域起始地址) 0x8000(下载区域最大字节数)
{
        ROM(第一执行区域名称) 0x0000(第一执行区域起始地址) 0x8000(第一执行区域最大字节数,如果编译的结果RO的疮毒大于此值会报警告强编译选项下会报错误)
       {
       *(+RO(代码与只读数据))
       }
      RAM(第二执行区域名称) 0x10000(第二执行区域起始地址) 0x6000(第二执行区域最大字节数)
      {
       *(+RW(读写变量), +ZI(未初始化变量))
      }
}
2 复杂内存映射
MEMORY_1 0x0000
{
       ROM_1 0x0000
       {
        program1.o(+RO)
       }
      DRAM 0x18000 0x8000
      {
       program1.o (+RW, +ZI)
      }
}
MEMORY_2 0x4000
{
       ROM_2 0x4000
       {
       program2.o(+RO)
       }
       SRAM 0x8000 0x8000
      {
       program2.o (+RW, +ZI)
      }
}
 
MEMORY_1 0x0000(下载区域一起始地址,后面的长度的限制参数缺省意味着不指定,这样容易在编译时没有警告执行文件的内存不足造成溢出)
{
       ROM_1 0x0000(第一执行区域开始地址)
       {
        program1.o(+RO) (program1.o内的Code与RO data 放在第一执行区域,这样就可以指定特定的文件的编译出的部分更加灵活的存放)
       }
       DRAM 0x18000(第二执行区域开始地址) 0x8000(第二执行区域最大字节数)
      {
       program1.o (+RW, +ZI) (program1.o内的RW data与 ZI data 放在第二执行区域)
      }
}
MEMORY_2 0x4000(下载区域二起始地址,不指定先知长度面临与第一段同样的风险)
{
       ROM_2 0x4000
       {
       program2.o(+RO) (program2.o内的Code与RO data 放在第一执行区域)
      }
      SRAM 0x8000 0x8000
      {
       program2.o (+RW, +ZI) (program2.o内的RW data与 ZI data 放在第二执行区域)
      }
}

BNF 符号与语法

" :由引号赖标示的符号保持其字面原意,如A”+”B标示A+B。
A ::= B :定义A为B。
[A] :标示可选部分,如A[B]C用来标示ABC或AC。
A+ :用来标示A可以重复任意次,如A+可标示A,AA,AAA, …
A* :同A+。
A | B :用来标示选择其一,不能全选。如A|B用来标示A或者B。
(A B) :标示一个整体,当和|符号或复杂符号的多次重复一起使用时尤其强大,如(AB)+(C|D)标示ABC,ABD,ABABC,ABABD, …

PI: 位置独立。
OVERLAY: 覆盖。
ABSOLUTE: 绝对地址。
FIXED: 固定地址,下载地址与执行地址具有该地址指示确定。
UNINIT: 未初始化数据。
RELOC:无法明确指定执行区域具有该属性,而只能通过继承前一个执行区或父区域获得。

0 0
原创粉丝点击