背景:头文件中经常会看到#define xxx__attribute__xxx,__attribute__的作用是什么呢?
__attribute__:用来设置属性的,包括函数、变量和类型。
格式:__attribute__((attribute-list)),例:__attribute__ ((aligned (4))) 、__attrubte__ ((packed))
常见参数:
- aligned:用来手动设置字节对齐。
#define ALIGN_4 __attribute((aligned(4))) struct TEST{ int a; short b; bool c; }ALIGN_4;
- packed:取消编译优化对齐,按照实际占用字节对齐。
#define PACKED __attribute((__packed__)) struct TEST{ int a; short b; bool c; }PACKED;
- at:绝对定位,把变量或函数绝对定位到Flash中,或者定位到RAM
const u16 gFlashDefValue[128] __attribute__((at(0x0800F000))) = {0x1234,0x1234};//定位在flash中,其他flash补充为00 const u16 gflashdata__attribute__((at(0x0800F000))) = 0xFFFF; u8 USART2_RX_BUF[USART2_REC_LEN] __attribute__ ((at(0X20001000)));//接收缓冲,最大USART_REC_LEN个字节,起始地址为0X20001000.
- section:将函数或数据放入指定名为“name”的段中。
long long rw[10] __attribute__ ((section ("RW")));