硬汉嵌入式论坛

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

[emWin] emwin 对话框 切换几次 就会死机

[复制链接]

3

主题

7

回帖

3

积分

新手上路

积分
3
发表于 2017-2-16 18:30:39 | 显示全部楼层 |阅读模式
项目中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;
    }
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2017-2-17 09:18:43 | 显示全部楼层
这么创建模式,建议先创建一个对话框排查下。看这个代码,没有发现什么问题。
回复

使用道具 举报

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2017-2-17 15:32:01 | 显示全部楼层
看下STM32启动文件里面的栈数据是多少 一般是0x00000800
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-15 00:21 , Processed in 0.222798 second(s), 30 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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