MDK(KEIL)中設定變數或陣列到指定的位置
阿新 • • 發佈:2019-02-17
定位變數到指定的位置
使用定義在標頭檔案 absacc.h中的 __at巨集,可以將變數以如下方式定位到絕對地址處:
C 例子:#include <absacc.h>
const char MyText[] __at (0x1F00) = "TEXT AT ADDRESS 0x1F00";
int x __at (0x40003000); // variable at address 0x40003000
unsigned char xArray[128] __at (0x68000000); // Array start at address 0x68000000
彙編例子:
在彙編檔案中可以使用段名,由|.ARM.__AT_<addr>|
AREA |.ARM.__AT_0xFFE0|, CODE, READONLY
u8 a[10] __attribute__ ((at(0x2000002c))); 編譯說 ..\List\ALL.axf: Error: L6971E: Section .data from object usart.o with type RW incompatible with Section .ARM.__AT_0x2000002C from object hal.o with type ZI in er RW_IRAM1. 似乎是定位了這個絕對地址後,其他變數不會為它讓位~
NONO,這個方法不行的,因為編譯器並沒有真正開闢一個變數,你僅僅是強行操作某個地址而已,但這個地址是否被其他資料利用了,你管不到也不知道~(0字)電子白菜[8次]2009-9-5 2:08:47
編譯器裡面應該有設定,比如系統總共有多少記憶體,你可以故意設定的少一些,這樣在編譯的時候他就會避開你沒有指定的了
通過*.map檔案可以檢視空間分配