_packed / #pragma pack() 字节对齐问题
Posted FIRST PUCK
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了_packed / #pragma pack() 字节对齐问题相关的知识,希望对你有一定的参考价值。
项目需要,需要spiflash存一些数据(包含结构体变量、数组等),读写接口需要封装的相对灵活
(协议栈、交互变量、状态机参数等,在掉电重启后能够按需求恢复),数据项存储偏移地址需要
较精确,所以存储结构体变量类型都用__packed修饰防止编译器填充字节,调试时候发现函数中访
问结构体中某些长整型变量会导致hardfault_handler!所以排列结构体变量时候还是要养成好习惯,
总结2个原则:
1.长字节放在前边
2.单字节放前边要保持是长字节整数倍(不够可以补保留字节)
附上两个链接:
博客园King先生 http://www.cnblogs.com/King-Gentleman/p/5940480.html
正点原子 http://www.openedv.com/thread-7415-1-1.html
cortex-M权威指南要好好翻翻了。
以上是关于_packed / #pragma pack() 字节对齐问题的主要内容,如果未能解决你的问题,请参考以下文章
高级C__attribute__((aligned(n))) 与 #pragma(pack(n))的区别
“#pragma pack”和“__attribute __((aligned))”之间的区别是什么?
#pragma pack(push) 和#pragma pack(pop) 以及#pragma pack()
GNU C字节对齐__attribute__((aligned(n))) #pragma pack(n)