pack 命令对于STM32一类的Cortex M3 处理器是十分有用的,因为可以有效压缩存贮空间,但又不降低运行效率.
个人喜欢使用在代码中使用
#pragma pack(1)
但发现这个命令的实际使用可能会带来一些混乱的.看下面的例子:
这个例子包含有3个程序文件,定义了一个数据结构tMyData;
在程序func.c 中定义了针对这个数据结构的操作.同样在main.c中也包含有对这个数据结构的操作.
但是func.c 中使用了#pragma pack(1)指令;main.c中没有使用 pack指令;
在Debug 调试环境下可以看到MData的结构为压缩的,显然受到了pack(1)的影响,MData占有6个字节.
但是,单步运行的时候,发现MData.DD32=0x33335555;赋值是错误的.显然
---------------------------------------
#ifndef __TYPE_H
#define __TYPE_H
typedef struct {
char DD8A;
long DD32;
char DD8B;
} tMyData;
void Func(tMyData *MyData);
#endif
------------main.c---------------------------
#include "type.h"
tMyData MData;
int main() {
MData.DD32=0x33335555;
Func(&MData);
return 0;
}
---------func.c------------------------------
#pragma pack(1)
#include "type.h"
void Func(tMyData *MyData) {
MyData->DD8A=0x11;
MyData->DD32=0;
MyData->DD8B=0x22;
}
基于IAR 6.3 的试验结果 |