硬汉嵌入式论坛

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

[emWin] 关于对话框与FreeRTOS的问题

[复制链接]

2

主题

7

回帖

52

积分

初级会员

积分
52
发表于 2018-1-13 22:35:03 | 显示全部楼层 |阅读模式
使用触屏的一个GPIO口作为中断,在中断中给FreeRTOS的触屏队列发数据。程序如下:
                if(GPIO_Pin==GPIO_PIN_15)         //这是中断后给队列发数据
                {
                        __DevicesStateSet(DeviceState_TouchPad);
                        xResult=xEventGroupSetBitsFromISR(TouchPadEventGroup,EventBit_TP,&xHigherPriorityTaskWoken);

                        if(xResult!=pdFAIL)
                        {
                                portYIELD_FROM_ISR( xHigherPriorityTaskWoken );        //创建对话框后这儿运行不到。就是xResult的值不对。               
                        }               
                       
                }       
然后在触屏的线程里面更新GUI_TOUCH_Exec       
        /* TouchPadEventTSK function */
void TouchPadEventTSK(void const * argument)
          {
                __DevicesStateClear(DeviceState_TouchPad);
              for(;;)
             {
                   xEventGroupWaitBits(TouchPadEventGroup,EventBit_TP,pdTRUE,pdFALSE,portMAX_DELAY);
                    HAL_I2C_MspInit(&hi2c1);
                   GUI_TOUCH_Exec();                  HAL_I2C_MspDeInit(&hi2c1);
                   __DevicesStateClear(DeviceState_TouchPad);
                     osDelay(1);
               }

          }
问题是这样的,在平时的触摸都是正常的。但是在创建阻塞式对话框后,触摸就不工作了。但是触摸中断是正常的,队列发送的数据返回值不对导致了触摸线程不工作。请问对话框程序为啥会对这个有影响?这个问题好奇怪呀。


对话框程序如下

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/
/*********************************************************************
*
*       _CreateMessageBox
*/
static WM_HWIN _CreateMessageBox(const char * sMessage, const char * sCaption, int Flags, const GUI_FONT * pFont) {
  WM_HWIN  hWin;
  WM_HWIN  hItem;
  GUI_RECT Rect;
       
  hWin = MESSAGEBOX_Create(sMessage, sCaption, Flags);
  //
  // Change font of message box window
  //
  FRAMEWIN_SetFont(hWin, pFont);
  //
  // Adjust size
  //
  WM_GetWindowRectEx(hWin, &Rect);
  WM_SetWindowPos(hWin, Rect.x0 - 35,
                        Rect.y0 - 20,
                        Rect.x1 - Rect.x0 + 1 + 70,
                        Rect.y1 - Rect.y0 + 1 + 50);
  //
  // Change font of button widget
  //
  hItem = WM_GetDialogItem(hWin, GUI_ID_OK);
        BUTTON_SetText(hItem,"确定");
  BUTTON_SetFont(hItem, pFont);
  //
  // Adjust size of button widget
  //
  WM_GetWindowRectEx(hItem, &Rect);
  WM_SetWindowPos(hItem, Rect.x0+20,
                         Rect.y0 + 30,
                         Rect.x1 - Rect.x0 + 1 + 30,
                         Rect.y1 - Rect.y0 + 1 + 10);
  //
  // Change font of text widget
  //
  hItem = WM_GetDialogItem(hWin, GUI_ID_TEXT0);
  TEXT_SetFont(hItem, pFont);
  //
  // Adjust size text widget
  //
  WM_GetWindowRectEx(hItem, &Rect);
  WM_SetWindowPos(hItem, Rect.x0-20,
                         Rect.y0,
                         Rect.x1 - Rect.x0 + 1 + 70,
                         Rect.y1 - Rect.y0 + 1 + 30);
  return hWin;
}

/*********************************************************************
*
*       _EnableSkinning
*/
static void _EnableSkinning(void) {
  FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
  BUTTON_SetDefaultSkin  (BUTTON_SKIN_FLEX);
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       MainTask
*/


void MessageboxShow(const char * sMessage)
{
       
          _EnableSkinning();
    GUI_ExecCreatedDialog(_CreateMessageBox(sMessage, "通知", 0, &GUI_FontHZ16));
    GUI_Clear();
       

}




回复

使用道具 举报

2

主题

7

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2018-1-13 22:38:03 | 显示全部楼层
。。。-_-||   而且这个问题好奇怪。有没有大神给个指导?谢谢各位了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-14 11:53:48 | 显示全部楼层
你的触摸任务优先级要高于emWin任务,要不触摸消息发不出去。你测试下是不是这个问题。
回复

使用道具 举报

2

主题

7

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2018-1-14 16:51:40 | 显示全部楼层
谢谢硬汉哥。我先试试。
回复

使用道具 举报

2

主题

7

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2018-1-14 19:56:50 | 显示全部楼层
eric2013 发表于 2018-1-14 11:53
你的触摸任务优先级要高于emWin任务,要不触摸消息发不出去。你测试下是不是这个问题。

我下午又进行了DeBug。发现问题其实是这样的。这个阻塞式对话框不仅阻塞了EMWIN的线程还把其他所有的线程都阻塞了。我已经把EMWIN的线程放在比较低的优先级了。它还是一直阻塞所有的线程。硬汉哥有空的话能指导一下我吗?谢谢。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115749
QQ
发表于 2018-1-15 00:49:25 | 显示全部楼层
Audacity 发表于 2018-1-14 19:56
我下午又进行了DeBug。发现问题其实是这样的。这个阻塞式对话框不仅阻塞了EMWIN的线程还把其他所有的线程 ...

如果确定配置了低优先级任务,但是其他与emWin无关的高优先级任务也无法执行,可以确定是的程序模板有问题。
回复

使用道具 举报

2

主题

7

回帖

52

积分

初级会员

积分
52
 楼主| 发表于 2018-1-15 10:33:18 | 显示全部楼层
eric2013 发表于 2018-1-15 00:49
如果确定配置了低优先级任务,但是其他与emWin无法的高优先级任务也无法执行,可以确定是的程序模板有问 ...

好的,谢谢硬汉哥。EMWIN线程在其他带操作系统的工程中是正常的。就是在这个正在移植的工程中不正常。应该是这个工程有点问题。谢谢大佬指点。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 05:27 , Processed in 0.244722 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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