我正在研究带有IAR编译器的STM8S微控制器。
如何使用pragma或其他方法修改起始位置多于一个变量。
当我尝试这些代码时,编译器会给出以下错误消息:
错误[Lp025]:绝对部分.near.bss(main.o#12) ([0x000100-0x000100])与绝对部分.near.bss重叠 (main.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;
答案 0 :(得分:1)
使用#pragma location = "my_abs"
或_Pragma("location=\"my_abs\"")
将您想要的变量放在同一个精灵部分的绝对区域中。由于#pragma location
仅适用于以下声明,因此您可能需要创建一个可在绝对块中声明变量时可以作为前缀的定义。请注意,预处理器宏中只允许使用_Pragma("location=\"my_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 };
请注意,您不能在同一部分中混合初始化和未初始化的变量。