我已创建了一个EFS项目,具有以下结构盒装结构从EFS给人奇怪的结果
struct
{
uint8 version; // uint8 - 1 byte data type, uint16 - 2 byte
uint16 y1;
uint16 y2;
uint16 y3;
uint8 reserved[9];
}
现在EFS文件大小出来是16字节,所以我认为这是挤满阅读。
现在我有相同的结构,在上电时我从EFS读取值,但由我的编译器返回的结构的大小为18字节(编译器不支持打包,因此EFS读取为失败)。
我只读了16个字节,它通过了。
问题:
(1)。如果我只读了16个字节,是不是有数据丢失的风险,因为在第一个成员之后,我的结构中将会有一个字节的填充空间(因为我的编译器不支持Packed结构并且我不能使用它) I向EFS写了下面的值,
version -0
y1 -6
y2 -10
y3 -60
我只读了16个字节,并且我的结构中的每个成员都被分配了正确的值。有没有我的结构将有错误的值的任何情况。
(2)。由于在步骤一个混乱,我创建一个临时struture像下面
struct
{
uint8 version;
uint8 y1_a;
uint8 y1_b;
uint8 y2_a;
uint8 y2_b;
uint8 y3_a;
uint8 y3_b;
uint8 reserved[9];
}
现在无论是EFS和结构大小为16字节, 现在,当我请输入到EFS作为 版本= 0,Y 1 = 6 ,Y2 = 10,Y3 = 60,
成员被分配这样的值:版本= 0,y1_a = 6,y1_b = 0,y2_a = 10,y2_b = 0, y3_a = 60,y3_b = 0;
有人可以帮助理解这一点吗? 我的想法是在temp结构中读取(以便EF和我的结构体的大小相同),然后将值从temp结构分配给我的原始结构
你使用什么编译器?什么处理器?这是嵌入式系统吗?什么OS? – phonetagger
yes其嵌入式系统,android,编译器因构建而异(取决于产品到产品) –
您可能会观察到和endian订购问题。你可能会在这里找到你需要的答案(http://en.wikipedia.org/wiki/Endianness)。 – WhozCraig