如何设定变量、常量和函数的地址

浏览:1449来源:本站时间:2021-01-28

背景介绍

本文描述了如何在指定存储器地址存放变量、常量和函数两种方法。


Pragma预编译指令和操作数@

Pragma预编译指令用于控制编译过程,如存储器分配、是否允许使用扩展关键字、是否允许输出警告信息等。IAR C\C++编译器提供的预编译指令符合ISO/ANSI C标准,适当使用Pragma预编译指令可使源程序更为清晰,同时编译后生成的目标代码也更简洁。

下面我们介绍Pragma预编译指令中的一个:

#pragma Location={address|NAME}

该指令用于指定在指令后面声明的变量的绝对地址,可选参数address为绝对地址,NAME为用户定义的存储器段名。变量必须以关键字 __no_init const声明。

采用操作符@或预编译指令#pragma Location可以将全局和静态变量定位到一个绝对地址,或者将函数或变量定位到一个指定的存储器段中。绝对定位变量必须采用关键字 __no_init const进行声明,并且不能带有初始式:

例如:

__no_init int x @ 0x1000;

或者

#pragma Location =0x1004

__no_init const int beta;

指定存储器段可以是预定义的存储器段,也可以是用户自定义的存储器段。也可以是编译器选项__section

将变量或函数定位到一个指定存储器段。

例如:

__no_init int alpha@“NOINIT;   /* 在用户自定义存储器段中定位数据变量 */

或者

#pragma Location =“CONSTANTS”

const int beta;


void f(void)@“FUNCTIONS;       /* 在指定存储器段中定位函数 */

void g(void)@“FUNCTIONS”;

{

}

或者

#pragma Location =“CONSTANTS”

void h(void);

京ICP备:京ICP备05011254号-1 版权归北京麦克泰软件技术有限公司所有
北京麦克泰软件技术有限公司