MDK(KEIL)中設(shè)定變量或數(shù)組到指定的位置
使用定義在頭文件 absacc.h中的 __at宏,可以將變量以如下方式定位到絕對地址處:
C 例子:
#include
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_
AREA |.ARM.__AT_0xFFE0|, CODE, READONLY
u8 a[10] __attribute__ ((at(0x2000002c)));
編譯說
..ListALL.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,這個方法不行的,因為編譯器并沒有真正開辟一個變量,你僅僅是強行操作某個地址而已,但這個地址是否被其他數(shù)據(jù)利用了,你管不到也不知道~(0字)電子白菜[8次]2009-9-5 2:08:47
編譯器里面應(yīng)該有設(shè)置,比如系統(tǒng)總共有多少內(nèi)存,你可以故意設(shè)置的少一些,這樣在編譯的時候他就會避開你沒有指定的了
通過*.map文件可以查看空間分配
評論