硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4686|回复: 1
收起左侧

[emWin] emwin的GUI_X_Lock会导致异常!

[复制链接]

45

主题

70

回帖

205

积分

高级会员

积分
205
发表于 2019-10-8 13:46:22 | 显示全部楼层 |阅读模式
本帖最后由 chinashaoshu 于 2019-10-8 14:17 编辑

问题:两个线程key(优先级为11)和emwin_gui(优先级18),按下按键给emwin发消息,发送过程如下,在key_handle中检测那个按键按下,然后直接调用Send_ButtonMess(x,MenuBar.opt);
  1. key线程
  2. static void key_handle(rt_uint32_t which_key)
  3. {
  4.     switch(which_key)
  5.    {
  6.       case KEY_FUNC1:{
  7.           Send_ButtonMess(0,MenuBar.opt);
  8.          rt_kprintf("fun1\r\n");
  9.       }break;
  10.         case KEY_FUNC2:{
  11.          Send_ButtonMess(1,MenuBar.opt);
  12.          rt_kprintf("fun2\r\n");
  13.          。。。
  14.        }break;
复制代码
Send_ButtonMess函数

  1. void Send_ButtonMess(uint8_t BnId,Menu_opt v)
  2. {
  3.         WM_MESSAGE Message;
  4.         Message.hWin = hMenuBar;
  5.         Message.MsgId = WM_NOTIFY_PARENT;
  6.         Message.hWinSrc = MenuBar.Button[BnId].hButton;
  7.         Message.Data.v = v;
  8.         WM_SendMessage(hMenuBar,&Message);
  9. }
复制代码
发送消息会触发回去emwin的互斥

  1. void GUI_X_Unlock(void)
  2. {
  3.   /* 发送互斥量 */
  4.   rt_mutex_release(GuiMutex);                                       
  5. }

  6. void GUI_X_Lock(void)
  7. {        
  8.   /* 获取互斥量 */
  9.   rt_mutex_take(GuiMutex, RT_WAITING_FOREVER);               
  10. }
复制代码
问题:有时候连续按下按键会导致画面不更新,按键没反应。
现象:仿真发现emwin线程正常运行,但是不再更新画面,好像是卡在什么地方了,keyboard线程也不再运行。

猜测:lcd的画面不更新了,但是emwin线程还能运行,emwin固件肯定出问题了,keyboard线程应该在死等互斥量,可能是连续快速按键,导致连续发送消息,使emwin出了问题,emwin rt_mutex_take了2次,但是只rt_mutex_release了一次,使得GuiMutex始终无法完全释放??观察emwin线程中会周期调用WM_SendMessage函数,可能连续按按键调用WM_SendMessage,使得打架了吧。。。。
请大神支支招!!!!

调试和仿真图片:



list_mutex.JPG
unnormal_ps.JPG
mutex_hold.JPG
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117619
QQ
发表于 2019-10-8 17:34:30 | 显示全部楼层
这个是基本操作,按说没啥问题啊。

参考我智能家居的例子,有用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-18 22:19 , Processed in 0.039388 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表