IAR如何将一组函数或变量放在特定段内

讨论
可以使用#pragma location将一个函数(或变量)放在命名的段中,例如:
#pragma location = “MY_FUNC”
void f (void );
但是,当要放置多个函数(或变量)时,使用#pragma location变得不切实际。
下面将描述这些方法:

? 使用单个pragma伪指令放置多个函数/变量。

? 使用链接器放置指令从目标文件放置多个函数。

使用单个pragma指令放置多个函数/变量

有两个pragma伪指令可以用于设置函数/变量的声明和定义的默认位置和属性:
? #pragma default_variable_attributes
? #pragma default_function_attributes
这两个pragma指令可以对多个声明和定义使用一个pragma指令,而不是使用多个pragma位置指令。
使用这些pragma指令的示例
在源代码中,将一些函数放在MY_FUNC段内:
---------------------------------------------------------
#pragma default_function_attributes = @ "MY_FUNC"
int fun1(int x)
{
return x + 1;
}
int fun2(int x)
{
return x - 1;
}
/* 停止函数安放在MY_FUNC段中 */
#pragma default_function_attributes =

int fun3(int x)
{
return x + x;
}
----------------------------------------------------------------
/* 在MY_DATA 段中安放下列数据 */
#pragma default_variable_attributes = @ "MY_DATA"

int data1;
int data2;

/* 停止在MY_DATA 段中安放下列数据 */
#pragma default_variable_attributes =

int data3;

int main()
{
data1 = fun1(5);
data2 = fun2(5);
data3 = fun3(5);

return data1 + data2 + data3;
}

将以下行添加到链接器配置文件(.icf),将所有数据放在MY_DATA段的指定内存地址范围内:
define region DATA_region = mem:[from 0x20000000 to 0x20001FFF ];

place in DATA_region { readwrite section MY_DATA };

将以下行添加到链接器配置文件,将所有代码放在MY_FUNC段的指定内存地址范围内:
define region FUNC_region = mem:[ from 0x70000 to 0x70FFF ];

place in FUNC_region { readonly section MY_FUNC };

使用链接器放置指令放置对象文件中的多个函数

比使用多个#pragma location更方便的方法是将这些函数放在单独的源文件中,并让链接器使用place in指令从object文件中选择所有函数。

步骤如下:
1. 在一个(或多个)源文件中收集函数。
2. 删除之前使用过的任何#pragma location指令。
3. 编辑 .icf文件,并在包含关键字object的指令中,添加一个place in,如下所示。
将以下行添加到链接器配置文件,以将源文件Utilities.c中的所有代码放在指定的内存地址范围内:
define region UTILITIES_region = mem:[ from 0x71000 to 0x71FFF ];

place in UTILITIES_region { readonly object Utilities.o };

结论

不需要使用多个#pragma location指令将数据/代码放在指定的内存地址范围内。根据需要您可以使用上面提供的方法。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值