前两天写了个程序,在PC上单元测试一切正常,但是加载到嵌入式系统中运行,执行的结果总是不正确,纠察了很久,发现问题出现在如下代码:
unsignedint type; unsignedchar *pType;
type = 2; pType = (unsignedchar *)&type; |
在PC机上,上述代码运行后,type=2, *pType=2,而在嵌入式系统中运行,得到的值却是type=2, *pType=0。
经过查阅资料才发现,原来这次使用的嵌入式系统数据存储是大端结构,低地址存放的是高位数据,上述数据的存储形式如下:
指针pType指向的是type变量的第一个字节所在的地址,实际上该字节保存的数据是type变量的最高字节的值。
在PC机上,数据存储是小端模式,低地址存放的是低位数据,上述数据的存储形式如下:
指针pType指向的数据正好就是type变量最低位字节的数据。
因此,编写嵌入式系统的代码,如果想要考虑到通用性,则应当尽量避免使用上述的指针用法来访问int类型数据的每个字节的值,而是应该使用int类型数据进行左移、右移等操作得到相应字节的值,这样不管是大端还是小端存储,都不会有问题。
本文出自 “rainman” 博客,请务必保留此出处http://lancelot.blog.51cto.com/393579/470035