在特定部分中放置一组函数或变量(IAR System)

介绍

本技术说明描述了两种在不使用几个#pragma location指令的情况下将多个函数或变量放置在指定节中的方法。

讨论区

可以使用#pragma location将一个函数(或变量)放置在命名节中,例如:

#pragma location = “ MY_FUNC” 
void f (void );

但是,当要放置许多函数(或变量)时,使用#pragma位置将变得不切实际。

将描述这些方法:

•使用单个pragma指令放置多个函数/变量。
•使用链接器放置指令从目标文件放置多个功能。

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

有两个可用的pragma指令,用于设置默认位置,以及用于函数/变量的声明和定义的属性:

•#pragma default_variable_attributes
•#pragma default_function_attributes

通过这两个pragma指令,可以将单个#pragma指令用于多个声明和定义,而不是使用多个#pragma location指令。

有关如何使用这些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 ); 
 返回数据1 +  data2 + data3 ; 
}

将以下行添加到链接器配置文件(.icf)中,以将所有数据放入MY_DATA部分中指定的内存地址范围内:

定义区域DATA_region = mem :[从0x20000000到0x20001FFF ]; 
放置在DATA_region {读写部MY_DATA };  

将以下行添加到链接器配置文件中,以将所有代码放在MY_FUNC节中指定的内存地址范围内:

定义区域FUNC_region = mem :[从0x70000到0x70FFF ]; 
地方在FUNC_region {只读部my_func,并将};   
 

使用链接器放置指令从目标文件放置多个功能

与使用多个#pragma位置相比,更方便的方法是将函数放在单独的源文件中,并让链接程序使用place in指令从目标文件中选择所有函数。

按着这些次序:

1.将功能收集在一个(或多个)源文件中。
2.删除您先前使用的任何#pragma位置指令。
3.编辑.icf文件,并在指令中添加一个包含关键字对象的位置,如下所示。

将以下行添加到链接器配置文件中,以将源文件Utilities.c中的所有代码放在指定的内存地址范围内:

定义区域UTILITIES_region = mem :[从0x71000到0x71FFF ]; 
地方在UTILITIES_region {只读对象工具。ö };   

结论

您无需使用多个#pragma location指令将数据/代码放置在指定的内存地址范围内。相反,您可以使用上述方法。

有关放在中的链接器放置指令的更多信息,请参阅IAR C / C ++开发指南中的标题“部分选择器”。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值