|
有一個在STM32F446ZE上使用STemWin遇到的問題想請教 如下列程式,使用DRAW_SCENE()做display LCD update,用Timer做次數計數 unsigned char _strtmp[20]; unsigned int Timer = 0; void DRAW_SCENE() { sprintf(_strtmp,"%5d:", Timer); GUI_DispStringAt(_strtmp, 80, 155); Timer++; } 程式除了LCD外,有跑餵固定數值做輸入的演算法,而每次都會在Timer= 1127時,當程式跑到” GUI_DispStringAt(_strtmp, 80, 155);”時,產生Hard Fault進入HardFault_Handler,這時的register如下: CFSR = 0x00000100 - IBUSERR = 1 =>指令總線錯誤 存访问错误 - STKERR = 0 HFSR - FORCED = 1 而不跑演算法則不會Hard fault,stack usage %不高 可請教可能的原因為何?! |
微信公众号
手机版
评分
查看全部评分
在stm32f446xx.h中 "#define __FPU_PRESENT 1U /*!< FPU present */ ",IAR中FPU選擇 VFPv4 single precision。這樣FPU應該開啟了?!
而hardfault的發生就出在執行BL 0x81a933c卻跑到0x3a9dd118,因此產生IBUSERR = 1的hardfault exception
1) 試著將emWin配置的size(#define GUI_NUMBYTES (1024) * 110 //x KByte,static U32 extMem[GUI_NUMBYTES / 4];), 調大或小, 發現 20/40/80K hard fault的timer count一致,而110K count較小就發生hardfault
2) 僅使用一個100Hz I2C取sensor data的timer,在main loop中僅有emWin及演算法,按鍵。單獨測試emWin不會hardfault,單獨測試演算法也不會hardfault,但兩塊一起跑就hardfault!