加入有如下代碼行:
? uchar rad[6]={0};
Read_InfNFlashSegment(Flash_InfD_BaseAddr,DGsensor_RadX_Offset,rad,6);????? ? //讀出rad的值
gSlopeBaseAngle.rad_x=*((int*)&rad[0]);????? ? //rad_x,rad_y,rad_z是int類型的值
gSlopeBaseAngle.rad_y=*((int*)&rad[2]);
gSlopeBaseAngle.rad_z=*((int*)&rad[4]);
實際上 通過指針轉化后的值gSlopeBaseAngle.rad_x并不等于rad[0]*256+rad[1](假定小端模式),而是會多出來一個異常的字符。
主要原因是因為
????????uchar類型的是一字節(jié)對齊的
????? ? int類型是2字節(jié)對齊的,如果MCU的系統(tǒng)字是2字節(jié),則定義int類型可能會總是在偶地址開始
。。。所以若果uchar是定義的起始地址在基地址時,就會出錯,多出來一個填充地址
解決方法:
????? #pragma data_alignment=2?
? uchar rad[6]={0};
#pragma pack ()
? ? 加上這句話后,定義rad時則會自動2字節(jié)對齊,起始地址就會在int對齊字上,通過指針訪問就正常了