如题:屏是240*320的
static void AppTaskTP (void *p_arg)
{
(void)p_arg;
while(1)
{
/* 延时10ms会读取一次触摸坐标 */
OSTimeDlyHMSM(0,0,0,10);
GUI_TOUCH_Exec(); //加入此句后,整个系统就死了。
}
}
查看GUI_TOUCH_Exec();函数主要是对触屏进行操作。可是将相关的底层函数都改成空体后,还是存在这个问题,不知是何原因。因为工程中的ucgui3.90版是没有源码的,只有库。
查看以前的源码找到GUI_TOUCH_Exec();的定义
/* GUI_TOUCH_Exec*/
void GUI_TOUCH_Exec(void) {
#ifndef WIN32
static U8 ReadState;
int x,y;
/* calculate Min / Max values */
if (xyMinMax[GUI_COORD_X].Min < xyMinMax[GUI_COORD_X].Max) {
xMin = xyMinMax[GUI_COORD_X].Min;
xMax = xyMinMax[GUI_COORD_X].Max;
} else {
xMax = xyMinMax[GUI_COORD_X].Min;
xMin = xyMinMax[GUI_COORD_X].Max;
}
if (xyMinMax[GUI_COORD_Y].Min < xyMinMax[GUI_COORD_Y].Max) {
yMin = xyMinMax[GUI_COORD_Y].Min;
yMax = xyMinMax[GUI_COORD_Y].Max;
} else {
yMax = xyMinMax[GUI_COORD_Y].Min;
yMin = xyMinMax[GUI_COORD_Y].Max;
}
/* Execute the state machine which reads the touch */
switch (ReadState) {
case 0:
yPhys = TOUCH_X_MeasureY(); //将此底层函数已改成空体 直接返回值100
TOUCH_X_ActivateY(); /* Prepare X- measurement */ 此函数也是空体
ReadState++;
break;
default:
xPhys = TOUCH_X_MeasureX(); //将此底层函数已改成空体 直接返回值100
TOUCH_X_ActivateX(); /* Prepare Y- measurement */此函数也是空体
/* Convert values into logical values */
#if !GUI_TOUCH_SWAP_XY /* Is X/Y swapped ? */
x = xPhys;
y = yPhys;
#else
x = yPhys;
y = xPhys;
#endif
if ((x < xMin) || (x > xMax) || (y < yMin) || (y > yMax)) {
_StoreUnstable(-1, -1);
} else {
x = _AD2X(x);
y = _AD2Y(y);
_StoreUnstable(x, y);
}
/* Reset state machine */
ReadState = 0;
break;
}
#endif /* WIN32 */
}
有遇到过相似问题的大神,指点下。谢谢! |