IAR下定义变量、常量、函数等到指定地址

1、直接将变量定义到指令地址

IAR中通过操作符@或者#pragma location指令来把全局变量和静态变量放到绝对地址上。

在此操作中,尤其注意的是要满足地址对齐。同时,所有变量必须声明为__no_init。

对于__no_init声明的变量是tentative definition(尝试性定义)。编译完可直接在MAP文件中查找到变量,即可看到变量是否定义到对应位置
比如:__no_init volatile unsigned int xxx @0x100020000

或:#pragma loation = 0x10020000

__no_init const int xxx = 0;

void f(void) @0x10020000

{}

__far_func void f(void) @  "section_name"

2、将变量定义到编译的section

section是在链接脚本xx.icf文件中定义的字段,而且你先必须在icf文件中有这个字段,然后才能定义

比如:__no_init volatile unsigned int xxx @  "section_name"

或:#pragma loation = "section_name"

__no_init const int xxx = 0;

 

3、将C文件全部函数链接某个段

#pragma default_function_attributes = @ ".myCodeSection"

.......

#pragma default_function_attributes =

 

 

4、将C文件全部变量链接某个段

#pragma default_variable_attributes = @ ".myVariSection"

......

#pragma default_function_attributes =

posted @ 2021-07-23 14:24  咸菜白饭  阅读(1904)  评论(0)    收藏  举报