关于CH579奇地址取数据死机问题

请教一下,CH579编程时,在数据处理时,当16位(32位)数据指针指向一个奇地址时,芯片会死掉,进入HardFault,导致程序没法继续执行。这是芯片问题吗?有没什么办法解决呢?


例:

UINT cksum(UCHAR *check,UINT length) //计算校验和   当传进来的check地址为奇地址,程序无法跑下去

{

LONG sum=0;

UINT i;

UINT  *ptr; 

    ptr=(UINT *)check;


for (i=0;i<(length/2);i++)

{

//sum+=*ptr++;

printf("%d ",ptr);//地址指向奇地址时,芯片进入HardFault

sum += HTONS(*ptr);

ptr++;

}

......

return ( (UINT)((sum)&0xffff));

}


你好,这是正常现象,  ch579 的内核是arm-cortex m0的 , 产生hardfault 的原因是没有对齐访问,如对一个不能被4整除的地址取uint32_t


这种情况下,你可以先判断下 传入的指针地址的对齐情况, 在不对齐的情况下, 你可以手动,按byte 方式处理,



Cortex M0 和RISC-V都是这样的,指针要对齐到4字节。不对齐就HardFault。



只有登录才能回复,可以选择微信账号登录