在KEIL MDK中定義變數到固定地址

不惑而已發表於2024-05-14

如果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檔案中定義這個段在什麼地址上。
這樣就可以把變數定義到想要的地址。

相關文章