關(guān)于CH579奇地址取數(shù)據(jù)死機(jī)問題

請教一下,CH579編程時,在數(shù)據(jù)處理時,當(dāng)16位(32位)數(shù)據(jù)指針指向一個奇地址時,芯片會死掉,進(jìn)入HardFault,導(dǎo)致程序沒法繼續(xù)執(zhí)行。這是芯片問題嗎?有沒什么辦法解決呢?


例:

UINT cksum(UCHAR *check,UINT length) //計算校驗和? ?當(dāng)傳進(jìn)來的check地址為奇地址,程序無法跑下去

{

LONG sum=0;

UINT i;

UINT? *ptr;?

? ? ptr=(UINT *)check;


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

{

//sum+=*ptr++;

printf("%d ",ptr);//地址指向奇地址時,芯片進(jìn)入HardFault

sum += HTONS(*ptr);

ptr++;

}

......

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

}


你好,這是正常現(xiàn)象,? ch579 的內(nèi)核是arm-cortex m0的 , 產(chǎn)生hardfault 的原因是沒有對齊訪問,如對一個不能被4整除的地址取uint32_t


這種情況下,你可以先判斷下 傳入的指針地址的對齊情況, 在不對齊的情況下, 你可以手動,按byte 方式處理,



Cortex M0 和RISC-V都是這樣的,指針要對齊到4字節(jié)。不對齊就HardFault。



只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频