|
项目中emwin 对话框 切换几次 就会死机,进入硬件错误,到底如何释放内存呢...
切换速度快了也会死机...
创建代码
第一个页面
WM_HWIN* CreateHomeDLG(void) {
static WM_HWIN hWin[7];
uint8_t i;
GUI_SetBkColor(0x00F8cf7a);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_UC_SetEncodeUTF8();
//WINDOW_SetDefaultBkColor(0x00CEE7F7);
hWin[0] = GUI_CreateDialogBox( _aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
hWin[1] = GUI_CreateDialogBox(_aDialog1Create, GUI_COUNTOF(_aDialog1Create), _cbDialog1, WM_HBKWIN, 0, 0);
hWin[2] = GUI_CreateDialogBox(_aDialog2Create, GUI_COUNTOF(_aDialog2Create), _cbDialog2, WM_HBKWIN, 0, 0);
hWin[3] = GUI_CreateDialogBox(_aDialog3Create, GUI_COUNTOF(_aDialog3Create), _cbDialog3, WM_HBKWIN, 0, 0);
hWin[4] = GUI_CreateDialogBox(_aDialog4Create, GUI_COUNTOF(_aDialog4Create), _cbDialog4, WM_HBKWIN, 0, 0);
hWin[5] = GUI_CreateDialogBox(_headCreate, GUI_COUNTOF(_headCreate), _cbHead, WM_HBKWIN, 0, 0);
hWin[6] = GUI_CreateDialogBox(_buttonDiaCreate, GUI_COUNTOF(_buttonDiaCreate), _cbButtonDia, WM_HBKWIN, 0, 0);
for (i=0;i<7;i++)
currentDLG.currentRunDLGhwin=hWin;
for (i=7;i<10;i++)
currentDLG.currentRunDLGhwin=NULL;
currentDLG.name=homeDLG;
return hWin;
}
第二个页面
WM_HWIN* CreateRealTimeDLG(void) {
uint8_t i;
static WM_HWIN hWin[7];
GUI_SetBkColor(0x00F8cf7a);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_UC_SetEncodeUTF8();
//WINDOW_SetDefaultBkColor(0x00CEE7F7);
hWin[0] = GUI_CreateDialogBox( _aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
hWin[1] = GUI_CreateDialogBox(_aDialog1Create, GUI_COUNTOF(_aDialog1Create), _cbDialog1, WM_HBKWIN, 0, 0);
hWin[2] = GUI_CreateDialogBox(_aDialog2Create, GUI_COUNTOF(_aDialog2Create), _cbDialog2, WM_HBKWIN, 0, 0);
hWin[3] = GUI_CreateDialogBox(_aDialog3Create, GUI_COUNTOF(_aDialog3Create), _cbDialog3, WM_HBKWIN, 0, 0);
hWin[4] = GUI_CreateDialogBox(_aDialog4Create, GUI_COUNTOF(_aDialog4Create), _cbDialog4, WM_HBKWIN, 0, 0);
hWin[5] = GUI_CreateDialogBox(_headCreate, GUI_COUNTOF(_headCreate), _cbHead, WM_HBKWIN, 0, 0);
hWin[6] = GUI_CreateDialogBox(_buttonDiaCreate, GUI_COUNTOF(_buttonDiaCreate), _cbButtonDia, WM_HBKWIN, 0, 0);
for (i=0;i<7;i++)
currentDLG.currentRunDLGhwin=hWin;
for (i=7;i<10;i++)
currentDLG.currentRunDLGhwin=NULL;
currentDLG.name=realDLG;
return hWin;
}
//关闭对话框
void exitCurrentDlg(void)
{
uint8_t i;
for (i=0;currentDLG.currentRunDLGhwin!=NULL;i++)
{
GUI_EndDialog( currentDLG.currentRunDLGhwin,0);
WM_DeleteWindow(currentDLG.currentRunDLGhwin);
}
GUI_Clear();
}
//切换对话框
void dlgChange(uint32_t keys)
{
//退出现在页面
switch (currentDLG.name)
{
case homeDLG:
//按钮A
if (keys&0x010000)
{
exitCurrentDlg();
CreateRealTimeDLG();
}
else if (keys&0x020000);
else if (keys&0x040000);
else if (keys&0x080000);
else if (keys&0x100000);
else if (keys&0x200000);
else if (keys&0x400000);
else if (keys&0x800000);
else;
break;
case realDLG:
if (keys&0x010000);
else if (keys&0x020000);
else if (keys&0x040000);
else if (keys&0x080000);
//按钮上
else if (keys&0x100000)
{
exitCurrentDlg();
CreateHomeDLG();
}
else if (keys&0x200000);
else if (keys&0x400000);
else if (keys&0x800000);
else;
break;
}
} |
|