1、用keil debug調試Nano系列MCU時,偶爾進入HardFault_Handler中程序死掉了。 原因: 1)定義變量時的類型是char,外部文件調用時聲明的是externint,同一變量定義與外部聲明不一致而導致錯誤。 2)用DMA時,1byte傳輸,數據手冊中要求地址要字對齊,由于是外設與內存之間使用dma,定義的數組在程序中換了定義的位置結果導致數據不正確,debug時還進入HardFault_Handler中,調整數組定義的地址就可以了。 摘抄總結: Cortex-M3/4的Fault異常是由于非法的存儲器訪問(比如訪問0地址、寫只讀存儲位置等)和非法的程序行為(比如除以0等)等造成的。常見的4種異常及產生異常的情況如下: BusFault:在fetch指令、數據讀寫、fetch中斷向量或中斷時存儲恢復寄存器棧情況下,檢測到內存訪問錯誤則產生BusFault。 Memory ManagementFault:訪問了內存管理單元(MPU)定義的不合法的內存區域,比如向只讀區域寫入數據。 Usage Fault:檢測到未定義指令或在存取內存時有未對齊。
|