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,这个方法不行的,因为编译器并没有真正开辟一个变量,你仅仅是强行操作某个地址而已,但这个地址是否被其他数据利用了,你管不到也不知道~(0字)电子白菜[8次]2009-9-5 2:08:47
 
编译器里面应该有设置,比如系统总共有多少内存,你可以故意设置的少一些,这样在编译的时候他就会避开你没有指定的了
 
通过*.map文件可以查看空间分配
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值