代码之家  ›  专栏  ›  技术社区  ›  mryldz

将变量放置在绝对内存位置(IAR C/C++)

  •  2
  • mryldz  · 技术社区  · 7 年前

    如何使用pragma或其他方法修复多个变量的起始位置?

    当我尝试以下代码时,编译器会给出以下错误消息:

    ([0x000100-0x000100])与绝对截面重叠。近的bss公司 (主o#8)([0x000100-0x000100])

    我在IAR技术笔记上搜索“绝对定位变量”,但找不到任何信息。

    #pragma location = 0x100   /* Start address of absolute location */
    
    extern uint8_t        R0,
                          R1,
                          R2,
                          R3,
    extern uint16_t       M1;           
    extern uint8_t        M2,    
                          M3;    
    
    1 回复  |  直到 3 年前
        1
  •  1
  •   Johan    7 年前

    使用 #pragma location = "my_abs" _Pragma("location=\"my_abs\"") #pragma location _Pragma(“位置=\“my\u abs\”)

    #pragma section="my_abs"
    #define IN_ABS _Pragma("location=\"my_abs\"")
    
    IN_ABS char  R0, R1, R2, R3;
    IN_ABS short M1;           
    IN_ABS char  M2, M3;
    
    int no_abs;
    

    然后在链接器配置中添加一行,将此部分放在指定的地址。

    place at address mem:0x100 { rw section my_abs };

    注意,不能在同一节中混合初始化和未初始化变量。