使用IAR时,如何批量定位函数或变量?

浏览:2743来源:本站时间:2019-06-27

在使用IAR Embedded Workbench时,用户如果需要将源码中的某个函数或者变量定位到自定义的section,一般是使用#pragma location =“section”预处理指令来实现。#pragma location =“section”的作用是让编译器在执行编译操作时,将指令后面的函数或者变量放置到用户指定的section。该预处理指令一次只能定位一个函数或者变量。


如果有很多的函数或者变量需要定位, IAR提供了批量定位函数/变量的预处理指令:
#pragma default_function_attributes

#pragma default_variable_attributes


下面是一个示例,示例对3个变量和3个函数进行定位。
/* 将以下变量放置到“myvar”section */
#pragma default_variable_attributes = @ "myvar"
static uint32_t testpoint1;
static uint32_t testpoint2;
static uint32_t testpoint3;


/* 停止将变量放置到“myvar”section */

#pragma default_variable_attributes =


/* 将以下函数放置到“myfunc”section */

#pragma default_function_attributes = @ "myfunc"
void function1(void);
void function2(void);
void function3(void);


/* 停止将函数放置到“myfunc”section */

#pragma default_function_attributes =

在链接器配置文件*.icf中指定“myvar”的存储位置:
place in RAM_region   { readwrite section  myvar };
在链接器配置文件*icf中指定“myfunc”的存储位置:
place in ROM_region   { readonly section myfunc};
构建工程,然后可以通过map文件来查看链接结果。


可见3个变量的地址是相邻的,都在名为“myvar”的段当中。同样地,3个函数的地址也是紧邻着的,都在myfunc段里面。



Note:以上实现方法适用于Ilink的IAR,即链接器配置文件格式是*.icf。





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