美文网首页
keil下scatter文件(.scf)

keil下scatter文件(.scf)

作者: itsenlin | 来源:发表于2022-07-27 16:18 被阅读0次

    说明

    文章来源https://www.itdaan.com/blog/2014/04/10/84884fec8326545cfb1e356b75493468.html
    担心无法访问,所以在这里记录一下主要内容

    分散加载文件语法

    语法:

    load_region_name  start_address | "+"offset  [attributes] [max_size]
    {
        execution_region_name  start_address | "+"offset  [attributes][max_size]
        {
            module_select_pattern  ["("
                                        ("+" input_section_attr | input_section_pattern)
                                        ([","] "+" input_section_attr | "," input_section_pattern)) *
                                   ")"]
        }
    }
    

    说明:

    • load_region加载区,用来保存永久性数据(程序和只读变量)的区域;

    • execution_region执行区,程序执行时,从加载区域将数据复制到相应执行区后才能被正确执行;

    • load_region_name加载区域名,用于“Linker”区别不同的加载区域,最多31个字符;

    • start_address起始地址,指示区域的首地址;

    • +offset前一个加载区域尾地址+offset 做为当前的起始地址,且“offset”应为“0”或“4”的倍数;

    • attributes区域属性,可设置如下属性:

      属性 说明
      PI 与地址无关方式存放;
      RELOC 重新部署,保留定位信息,以便重新定位该段到新的执行区;
      OVERLAY 覆盖,允许多个可执行区域在同一个地址,ADS不支持;
      ABSOLUTE 绝对地址(默认);
    • max_size该区域的大小;

    • execution_region_name执行区域名;

    • start_address该执行区的首地址,必须字对齐;

    • +offset 同上;

    • attributes同上;

      属性 说明
      PI 与地址无关,该区域的代码可任意移动后执行;
      OVERLAY 覆盖;
      ABSOLUTE 绝对地址(默认);
      FIXED 固定地址;
      UNINIT 不用初始化该区域的ZI段;
    • module_select_pattern 目标文件滤波器,支持通配符*?*.o匹配所有目标,* (或.ANY)匹配所有目标文件和库。

    • input_section_attr每个input_section_attr必须跟随在后;且大小写不敏感;

      属性 说明
      RO-CODE 或 CODE
      RO-DATA 或 CONST
      RO或TEXT selects both RO-CODE and RO-DATA
      RW-DATA
      RW-CODE
      RW 或 DATA selects both RW-CODE and RW-DATA
      ZI 或 BSS
      ENTRY that is a section containing an ENTRY point.
      FIRST 用于指定存放在一个执行区域的第一个或最后一个区域;
      LAST 同上;
    • input_section_pattern段名;

    示例

    ; *************************************************************
    ; *   Scatter-Loading Description File generated by uVision   *
    ; *************************************************************
    
    LR_IROM1 0x00000000 0x00080000  {      ; 第一个加载域,名字是LR_IROM1,起始地址0x00000000 大小是0x00080000
        ER_IROM1 0x00000000 0x00080000  {   ; 第一个运行时域,名字是ER_IROM1 起始地址0x00000000 大小事0x00080000
            *.o (RESET, +First)             ; IAP第一阶段在FLASH中运行
            *(InRoot$$Sections)             ; All library sections that must be in a root region
            .ANY (+RO)                      ; .ANY与*功能相似,用.ANY可以把已经被指定的具有RW,ZI属性的数据排除
        }
        RW_IRAM1 0x10000000 0x00010000  {   ; RW data
            .ANY(+RW +ZI)
        }
        RW_SDRAM1 0xA0000000 0x00800000  {  ; RW data
            STARTUP_LPC177X_8X.o (HEAP)     ;HEAP用来定位堆栈的底
            *.LIB(+RW +ZI)
        }
    }
    

    相关文章

      网友评论

          本文标题:keil下scatter文件(.scf)

          本文链接:https://www.haomeiwen.com/subject/tqsxwrtx.html