Linker IAR链接器配置文件-缺少";。intvec“;安置

Linker IAR链接器配置文件-缺少";。intvec“;安置,linker,iar,Linker,Iar,我正在处理一个IAR项目,其中有用于引导加载程序和主应用程序的ILINK配置文件(.icf)。每个文件都定义了\uu ICFEDIT\u intvec\u start\uu符号,然后将其放置在各自的.intvec部分(有2个cstartup.s文件,每个文件都有自己的.intvec部分): 引导加载程序.icf: define symbol __ICFEDIT_intvec_start__ = 0x18000000; ... place at address mem:_

我正在处理一个IAR项目,其中有用于引导加载程序和主应用程序的ILINK配置文件(
.icf
)。每个文件都定义了
\uu ICFEDIT\u intvec\u start\uu
符号,然后将其放置在各自的
.intvec
部分(有2个
cstartup.s
文件,每个文件都有自己的
.intvec
部分):


引导加载程序
.icf

    define symbol __ICFEDIT_intvec_start__ = 0x18000000;
    ...
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    define symbol __ICFEDIT_intvec_start__ = 0x18080000;
    ...
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
应用程序
.icf

    define symbol __ICFEDIT_intvec_start__ = 0x18000000;
    ...
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
    define symbol __ICFEDIT_intvec_start__ = 0x18080000;
    ...
    place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

据我所知,每个
.icf
文件都用于生成自己的
.map
文件。看到这两个部分如何引用两个不同的部分(共享相同的名称),我很困惑,为什么引导加载程序只有
.map
文件引用
.intvec
部分:


引导加载程序
.map

    *******************************************************************************
    *** PLACEMENT SUMMARY
    ***

    "A1":  place at 0x18000000 { ro section .intvec };
    "P1":  place in [from 0x18000040 to 0x1807ffff] { ro };
    "P2":  place in [from 0x20020000 to 0x209fffff] {
              rw, block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
              block UND_STACK, block ABT_STACK, block HEAP };

      Section            Kind        Address    Size  Object
      -------            ----        -------    ----  ------
    "A1":                                       0x3c
      .intvec            ro code  0x18000000    0x3c  cstartup.o [1]
                                - 0x1800003c    0x3c
    ...
    *******************************************************************************
    *** PLACEMENT SUMMARY
    ***

    "INT_VEC_RAM":
           place at 0x20020000 { section .intvec_RAM };
    "ROM": place in [from 0x18080040 to 0x1bffffff] {
              ro section .cstartup, block ROM_CONTENT };
    "RAM": place in [from 0x20020040 to 0x209fffff] { block RAM_CONTENT };

      Section                Kind        Address      Size  Object
      -------                ----        -------      ----  ------
    "ROM":                                        0x2405e0
      ROM_CONTENT                     0x18080040  0x2405e0  <Block>
        .text                ro code  0x18080040     0x104  access.o [8]
        .text                ro code  0x18080144     0x18c  cstartup.o [1]
应用程序
.map

    *******************************************************************************
    *** PLACEMENT SUMMARY
    ***

    "A1":  place at 0x18000000 { ro section .intvec };
    "P1":  place in [from 0x18000040 to 0x1807ffff] { ro };
    "P2":  place in [from 0x20020000 to 0x209fffff] {
              rw, block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
              block UND_STACK, block ABT_STACK, block HEAP };

      Section            Kind        Address    Size  Object
      -------            ----        -------    ----  ------
    "A1":                                       0x3c
      .intvec            ro code  0x18000000    0x3c  cstartup.o [1]
                                - 0x1800003c    0x3c
    ...
    *******************************************************************************
    *** PLACEMENT SUMMARY
    ***

    "INT_VEC_RAM":
           place at 0x20020000 { section .intvec_RAM };
    "ROM": place in [from 0x18080040 to 0x1bffffff] {
              ro section .cstartup, block ROM_CONTENT };
    "RAM": place in [from 0x20020040 to 0x209fffff] { block RAM_CONTENT };

      Section                Kind        Address      Size  Object
      -------                ----        -------      ----  ------
    "ROM":                                        0x2405e0
      ROM_CONTENT                     0x18080040  0x2405e0  <Block>
        .text                ro code  0x18080040     0x104  access.o [8]
        .text                ro code  0x18080144     0x18c  cstartup.o [1]

答案似乎比我想象的要明显得多。根据“”中的“链接概述”部分,IAR的链接器软件ILINK忽略重复部分。因此,如果一个节已经在一个二进制对象或ILINK配置文件(ICF)中被引用,那么对它的所有其他引用都将被忽略

在本项目中,由于引导加载程序具有优先权(在应用程序[在项目的
.board
文件中定义;详细信息]之前加载并刷新),因此应用程序代码的
.intvec
被视为重复,因此被忽略/丢弃