emWin調試觸摸屏進入HardFault_Handler的解決辦法

嘗試把工程設置裏的 use MicroLIB 勾選去掉

 

使用emWin528調試觸摸屏,發現在調用 GUI_TOUCH_Exec() 時直接進入 HardFault_Handler 錯誤中斷。

單步調發現問題出在 GUI_TOUCH_StoreState 或 GUI_TOUCH_StoreStateEx 這兩個函數上,而單獨調用GUI_TOUCH_StoreState 時可以正常產生觸摸屏的效果,調用 GUI_TOUCH_StoreStateEx 時仍然進入錯誤中斷。

在增加了堆棧、更改了編譯優化等級、更改各種接口函數、切換GUI內存(內部RAM和外部RAM)後均無效果。

後來發現使用emWin526版本的庫文件程序是正常的,再把emWin522、emWin532全部試了一遍,也都不行,就只有emWin526能使用。隱約記得查到一篇文章有提到 emWin 會用到內存申請函數,然後嘗試把工程設置裏的 use microlib 勾選去掉,再編譯一下,竟然就好了,所有版本的 emWin 都不會再進錯誤中斷了。這樣的話,需要用到microlib庫裏的函數就要自己寫,或者觸摸屏處理只用GUI_TOUCH_StoreState 來實現。

還有一個沒有確定的是,emWin526庫的後綴是CM4F,其他版本都是CM4,不知道硬浮點會不會對emWin的庫有影響,因爲用了FreeRTOS操作系統必須要用到硬浮點,所以就沒再嘗試關掉硬浮點。

 

//用GUI_TOUCH_StoreState 處理觸摸動作的實現方式

GUI_PID_STATE touch_sta;

user_get_touch_pos(&touch_sta); //自己的讀座標函數

if(touch_sta.Pressed)
{
    GUI_TOUCH_StoreState(touch_sta.x, touch_sta.y);
}
else
{
    GUI_TOUCH_StoreState(-1, -1); //發送負座標表示未按下
}

 

 

原創文章,轉載請註明出處。

如有疑問或建議,請在回覆中說明,謝謝!

發佈了9 篇原創文章 · 獲贊 14 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章