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