在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等)应该被严格禁止的。因为很有可能出现访问不对齐出错