ARM的字对齐问题总结
四、ARM平台的对齐问题 在ARM中,有ARM和Thumb两种指令。 ARM指令:每执行一条指令,PC的值加4个字节(32bits).一次访问4字节内容,该字节的起始地址必须是4字节对齐的位置上,即地址的低两位为bits[0b00],也就是说地址必须是4的倍数。 Thumb指令:每执行一条指令,PC的值加2个字节(16bits).).一次访问2字节内容,该字节的起始地址必须是2字节对齐的位置上,即地址的低两位为bits[0b0],也就是说地址必须是2的倍数。 五、ARM平台字节对齐关键字 3. __unaligned 六、如何查找与字节对齐方面的问题
1. __align(num)
A、在汇编中使用LDRD或者STRD时,就用到此命令__align(8)进行修饰限制。来保证数据对象是相应对齐。
B、该修饰对象的命令最大是8个字节限制,可让2字节的对象进行4字节
C、 __align是存储类修改,他只修饰最高级类型对象不能用于结构或者函数对象。
2. __packed
__packed是进行一字节对齐。
A、不能对packed的对象进行对齐;
B、所有对象的读写访问都进行非对齐访问;
C、float及包含float的结构联合及未用__packed的对象将不能字节对齐;
D、__packed对局部整形变量无影响;
D、强制由unpacked对象向packed对象转化是未定义,整形指针可以合法定
义为packed __packed int* p; //__packed int 则没有意义。
如果出现对齐或者赋值问题首先查看:
1. 编译器的big little端设置;
2. 看这种体系本身是否支持非对齐访问;
3. 如果支持看设置了对齐与否,如果没有则看访问时需要加某些特殊的修饰来标志其特殊访问操作。
七、结论
typedef struct tag_T_MSG{
long ParaA;
long ParaB;
short ParaC;
char ParaD;
char Pad;
} T_MSG;
ARM字对齐问题总 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)