数组定义起始地址的问题

14 篇文章 0 订阅

假如有如下代码行:

 

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类型的是一字节对齐的

        int类型是2字节对齐的,如果MCU的系统字是2字节,则定义int类型可能会总是在偶地址开始

。。。所以若果uchar是定义的起始地址在基地址时,就会出错,多出来一个填充地址

解决方法:

      #pragma data_alignment=2 
  uchar rad[6]={0};

#pragma pack ()

    加上这句话后,定义rad时则会自动2字节对齐,起始地址就会在int对齐字上,通过指针访问就正常了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值