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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章