1.4 属性
通过属性扩展变量或函数的意义,如中断函数。格式为
__attribute__((attribute-list)) 即支持多个属性,属性之间用“,”间隔。
1.4.1 Interrupt 中断函数
用作中断处理程序的函数生成序言和尾声代码。如:使用__attribute__((interrupt))修饰函数,则该函数即被编译器视为中断函数处理。详情参见中断处理程序。
1.4.2 section (“name”) 指定类型段
将函数或变量放入由“name”指定的段。
例如,void __attribute__((section(“.new_sect1”))) foo(){return;}
函数 foo 将被放入.new_sect1 段。
unsigned int var __attribute__((section(“.new_sect2”)))
变量 var 将被放入.new_sect2 段。
当声明该属性后-ffunction-sections、-fdata-sections 命令行选项对该属性定义的函数不起作用。
常见的段定义为 text (flash 空间), data(RAM 空间)。同时根据需要将空间进行罗列化顺序使用,即针对 flash 空间,先存放 text 段的 vector 文件中代码,也就是中断向量表。接着存放普通的 text 函数代码信息,后面跟常量属性的 rdata 和 rodata 代码信息。针对 ram 空间,设计 ram 函数的存放的定义 indata 段名,定义初始化的数据.data 段名,定义无初始化的数据 COMMON或 bss 段名。
1.4.3 packed 对齐
具有该属性的变量或结构成员将具有所可能的最小对齐值。即,将不为声明分配任何对齐填充存储空间。与 aligned 属性联合使用时, packed 可以用于设置任意的对齐限制,即大于或小于变量或结构成员的类型所具有的默认对齐值。
需要注意的是,即使声明了该对齐模式,但针对结构体、联合体,其起始仍将按照对齐存放。
如 struct name1{
char order1;
struct name2{
char order2;
} __attribute__((packed)) names;
} __attribute__((packed)) name ; 的 order2 偏移地址是 4。
1.4.4 常见属性
变量属性支持
algined(alignment) 定义数据地址对齐配置
unused
定义参数未使用的不给予警告
used
即使看起来未使用,也对其进行编译
packed
一般语言结构体或联合,明确内部连续地址分派。
section(“section-name”)
函数属性支持
section(“section-name”)
noinline 强制函数不内联,定义的 inline 是否内联由编译器决定
always_inline 强制函数内联
weak
常定义中断函数,即 即使未发现调用关系仍保留该函数。
alias(“fun-name”) 函数为别名
unused 未使用也不输出警告信息
|