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 =