在KEIL MDK中定义变量到固定地址
如果keil使用的是AC5编译器,则可以使用如下简单语句定义变量到固定地址,RAM变量和ROM变量均适用。
#define ADDRESS 0x20001F80
int x1 __attribute__((at(ADDRESS)));
如果是使用的AC6编译器,那么以上的用法就不行了。语法和方法都变了。首选语法上是要指定段名称如下:
uint8_t array[810241024] attribute((section(".ARM.__at_0x60000000")))
uint8_t array[810241024] attribute((section(".bss.ARM.__at_0x60000000")))
然后光写上面的语句是不行了。有时会报错。有时没报错,但是查看.map你会发现根本就没有定义到你想要的地址去。
大概的方法是:先在代码中使用语句指定段名称。就是你要把变量定义到什么段。这个段很关键的。然后你在SCT文件中定义这个段在什么地址上。
这样就可以把变量定义到想要的地址。

浙公网安备 33010602011771号