MDK(KEIL)中设定变量或数组到指定的位置
定位变量到指定的位置
使用定义在头文件 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,这个方法不行的,因为编译器并没有真正开辟一个变量,你仅仅是强行操作某个地址而已,但这个地址是否被其他数据利用了,你管不到也不知道~(0字)电子白菜[8次]2009-9-5 2:08:47
编译器里面应该有设置,比如系统总共有多少内存,你可以故意设置的少一些,这样在编译的时候他就会避开你没有指定的了
通过*.map文件可以查看空间分配
- LCD12864指定位置反白显示程序(12-02)
- arm 变量或数组放置在指定地址(11-20)
- STM32在IAR指定文件(函数)首地址(11-13)
- ARM如何指定函数运行在RAM--KEIL(11-09)
- Qt 类型编辑实例-指定QPushButton 菜单指示器的子控制(07-31)
- 基于DSP NNC-PID的电液位置伺服控制系统设计(07-24)