|
使用触屏的一个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();
}
|
|