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); //发送负坐标表示未按下
}

 

 

原创文章,转载请注明出处。

如有疑问或建议,请在回复中说明,谢谢!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值