我在 freertos 下创建了一个 emwin 的 task。写了一个窗口,上面有几个文本控件,表示时间(年月日等),预期的效果是能逐个闪烁以提示用户修改。为了实现闪烁的效果,我用 Timer 每隔一段时间重新绘制文本(显示值或者不显示)。现在遇到的问题是,如果我把这个 Timer 的时间放长到 1 s ,就一切正常;但是如果调整到 500ms ,就会发现 GUI task 的 while 1 里面的每轮时间拉长了(原来是 GUI_Delay 100 ms,现在变成了600 ms)。请问这是什么原因造成的呢?
代码如下:
[C] 纯文本查看 复制代码
#define TEXT_BLINKING_SPEED 500
static void presentDateTime(WM_HWIN hWin)
{
static U8 isDisplayNbr = 0;
char nullStr[3] = "";
WM_HWIN hItem;
int i;
for (i = ID_TEXT_0; i <= ID_TEXT_4; i++) {
char *pValue;
if (i == currWidgetId) {
pValue = (isDisplayNbr ? getDateTimeFieldStr(i) : &nullStr[0]);
} else {
pValue = getDateTimeFieldStr(i);
}
hItem = WM_GetDialogItem(hWin, i);
TEXT_SetText(hItem, pValue);
}
isDisplayNbr = isDisplayNbr ? 0 : 1;
}
static void _cbDialog(WM_MESSAGE * pMsg) {
const void * pData;
WM_HWIN hItem;
U32 FileSize;
// USER START (Optionally insert additional variables)
WM_HWIN hWin = pMsg->hWin;
int i;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
// ...
case WM_PAINT:
presentDateTime(pMsg->hWin);
break;
case WM_TIMER:
WM_InvalidateWindow(hWin);
WM_RestartTimer(pMsg->Data.v, TEXT_BLINKING_SPEED);
break;
// USER END
default:
WM_DefaultProc(pMsg);
break;
}
WM_HWIN CreateWindow_clock(void);
WM_HWIN CreateWindow_clock(void) {
WM_HWIN hWin;
WM_HTIMER hTimer;
TEXT_SetDefaultFont(GUI_FONT_32B_ASCII);
TEXT_SetDefaultTextColor(GUI_WHITE);
getDateTimeToStr(&g_textDateTime);
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
hTimer = WM_CreateTimer(hWin, 0, TEXT_BLINKING_SPEED, 0);
WM__ahWinFocus[0] = hWin;
return hWin;
}
void MainTask(void)
{
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init();
CreateWindow_clock();
while(1)
{
printf("before GUI_Delay\r\n");
GUI_Delay(100);
printf("after GUI_Delay\r\n");
}
}
log 如下:
[C] 纯文本查看 复制代码
[21:50:27.852]before GUI_Delay
[21:50:28.490]after GUI_Delay
[21:50:28.491]before GUI_Delay
[21:50:29.146]after GUI_Delay
[21:50:29.147]before GUI_Delay
[21:50:29.785]after GUI_Delay
[21:50:29.785]before GUI_Delay
[21:50:30.425]after GUI_Delay
[21:50:30.425]before GUI_Delay
|