在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文件中定义这个段在什么地址上。
这样就可以把变量定义到想要的地址。

posted @ 2024-05-14 16:57  不惑而已  阅读(2284)  评论(0)    收藏  举报