ITPub博客

首页 > Linux操作系统 > Linux操作系统 > MDK(KEIL)中设定变量或数组到指定的位置

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

Linux操作系统 作者:喜欢你的微 时间:2014-12-16 11:27:53 0 删除 编辑
  定位变量到指定的位置


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


  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,这个方法不行的,因为编译器并没有真正开辟一个变量,你仅仅是强行操作某个地址而已,但这个地址是否被其他数据利用了,你管不到也不知道~(0字)电子白菜[8次]2009-9-5 2:08:47


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


  通过*.map文件可以查看空间分配
推荐阅读:http://www.dlteacher.com/blog/user1/39356/archives/2014/181199.html

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30007806/viewspace-1369314/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: STM32--低功耗模式
请登录后发表评论 登录
全部评论

注册时间:2014-11-04

  • 博文量
    17
  • 访问量
    50015