MDK(KEIL)中设定变量或数组到指定的位置

定位变量到指定的位置

使用定义在头文件 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>|组成来定义位置。下面的例子是将一个段定义到地址0xFFE0处:

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,这个方法不行的,因为编译器并没有真正开辟一个变量,你仅仅是强行操作某个地址而已,但这个地址是否被其他数据利用了,你管不到也不知道~

编译器里面应该有设置,比如系统总共有多少内存,你可以故意设置的少一些,这样在编译的时候他就会避开你没有指定的了

通过*.map文件可以查看空间分配

永不止步步 发表于03-11 10:59 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345327个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号