单片机的非对齐访问导致硬件错误

    在cortex-m0编程的时候,要注意cpu的非对齐访问,因为cortex-m0的访问的32位的也就是4个字节。下面我们在做一个实验,来验证飞对齐访问导致cpu出错


void fun(uint16_t *point)
{
uint8_t buf[3] = {0};
*point  =  0;
SEGGER_RTT_printf(0,"point: %x \r\n",*point);
}


   void main(void)

{

  uint8_t buf[10] ={0};

  fun((uint16_t  *)(0x20003ed5)); //0x20003ed5 在变量的地址

 while(1);

}


0x20003ed5 = 536886997  这个地址不能被4整除 。是在基数位置,所以在子函数改变这个值的时候 出现的硬件错误。

在实际应用中我们申请变量 地址是随机的,很有可能申请的地址是不对齐,导致仿真出错

这样就跳到了硬件中断里面去。

注意:

指针小转大(u8转u16,u16转u32等)应该被严格禁止的。因为很有可能出现访问不对齐出错


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值