MDK(KEIL)中設(shè)定變量或數(shù)組到指定的位置
使用定義在頭文件 absacc.h中的 __at宏,可以將變量以如下方式定位到絕對(duì)地址處:
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)));
編譯說(shuō)
..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.
似乎是定位了這個(gè)絕對(duì)地址后,其他變量不會(huì)為它讓位~
NONO,這個(gè)方法不行的,因?yàn)榫幾g器并沒(méi)有真正開(kāi)辟一個(gè)變量,你僅僅是強(qiáng)行操作某個(gè)地址而已,但這個(gè)地址是否被其他數(shù)據(jù)利用了,你管不到也不知道~(0字)電子白菜[8次]2009-9-5 2:08:47
編譯器里面應(yīng)該有設(shè)置,比如系統(tǒng)總共有多少內(nèi)存,你可以故意設(shè)置的少一些,這樣在編譯的時(shí)候他就會(huì)避開(kāi)你沒(méi)有指定的了
通過(guò)*.map文件可以查看空間分配
評(píng)論