1、用keildebug調(diào)試Nano系列MCU時,偶爾進(jìn)入HardFault_Handler中程序死掉了。原因:
本文引用地址:http://m.butianyuan.cn/article/201611/322016.htm1)定義變量時的類型是char,外部文件調(diào)用時聲明的是extern int,同一變量定義與外部聲明不一致而導(dǎo)致錯誤。
2)用DMA時,1byte傳輸,數(shù)據(jù)手冊中要求地址要字對齊,由于是外設(shè)與內(nèi)存之間使用dma,定義的數(shù)組在程序中換了定義的位置結(jié)果導(dǎo)致數(shù)據(jù)不正確,debug時還進(jìn)入HardFault_Handler中,調(diào)整數(shù)組定義的地址就可以了。
摘抄總結(jié):
Cortex-M3/4的Fault異常是由于非法的存儲器訪問(比如訪問0地址、寫只讀存儲位置等)和非法的程序行為(比如除以0等)等造成的。常見的4種異常及產(chǎn)生異常的情況如下:
Bus Fault:在fetch指令、數(shù)據(jù)讀寫、fetch中斷向量或中斷時存儲恢復(fù)寄存器棧情況下,檢測到內(nèi)存訪問錯誤則產(chǎn)生Bus Fault。
Memory Management Fault:訪問了內(nèi)存管理單元(MPU)定義的不合法的內(nèi)存區(qū)域,比如向只讀區(qū)域?qū)懭霐?shù)據(jù)。
Usage Fault:檢測到未定義指令或在存取內(nèi)存時有未對齊。
評論