打印
[开发工具]

关于IAR中pack编译控制命令的使用

[复制链接]
2138|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
seawwh|  楼主 | 2013-1-2 00:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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 的试验结果

pack.JPG (148.67 KB )

pack.JPG
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

0

粉丝