嘗試把工程設置裏的 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); //發送負座標表示未按下
}
原創文章,轉載請註明出處。
如有疑問或建議,請在回覆中說明,謝謝!