在学习STM32的时候有些数组需要设置对齐的方式,记录一下

IAR 使用#pragma data_alignment来设置字节对齐方式,IAR for ARM 编译器默认的是4字节对齐,使用了一点代码进行验证

u8 array_1[20]; // 默认4字节对齐的,与n取值无关。

u16 array_2[20]; // 默认4字节对齐的,与n取值无关。

u32 array_3[20]; // 默认4字节对齐的,与n取值无关。

#pragma data_alignment = 1

u8 array_5[20]; // 设置为1字节对齐的,与n取值无关。

#pragma data_alignment = 2

u16 array_6[20]; // 设置为2字节对齐的,与n取值无关。

#pragma data_alignment = 8

u32 array_7[20]; // 设置为8字节对齐的,与n取值无关。

 

在 IAR assembler output 中查看如下,确认设置生效了

\ In section .bss, align 4

8 u8 array_1[20]; // 默认4字节对齐的,与n取值无关。

\ array_1:

\ 0x0 DS8 20

\ In section .bss, align 4

9 u16 array_2[20]; // 默认4字节对齐的,与n取值无关。

\ array_2:

\ 0x0 DS8 40

\ In section .bss, align 4

10 u32 array_3[20]; // 默认4字节对齐的,与n取值无关。

\ array_3:

\ 0x0 DS8 80

11

12 #pragma data_alignment = 1

\ In section .bss, align 1  //输出文件显示设置生效了

13 u8 array_5[20]; // 设置为1字节对齐的,与n取值无关。

\ array_5:

\ 0x0 DS8 20

14

15

16 #pragma data_alignment = 2

\ In section .bss, align 2

17 u16 array_6[20]; // 设置为2字节对齐的,与n取值无关。

\ array_6:

\ 0x0 DS8 40

18

19 #pragma data_alignment = 8

\ In section .bss, align 8

20 u32 array_7[20]; // 设置为8字节对齐的,与n取值无关。

\ array_7:

\ 0x0 DS8 80

21

 

IAR 输出 assembler file 文件的办法

如果要查找某个变量的对齐方式,在IAR assembler output 文件中里也能查看到。

 

在项目 右键–》Options–》C/C++Compiler–》List 选项下选择就可以了

 

发表评论

你的电子邮件地址不会被公开 * 为必填字段

提交评论