硬汉嵌入式论坛

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

[emWin] 怎么emwin进入循环后按键都失效了

  [复制链接]

22

主题

114

回帖

180

积分

初级会员

积分
180
发表于 2020-11-19 08:58:02 | 显示全部楼层 |阅读模式
设置了这么一个循环,
void Fill()
{
        while(1)
        {       
                LED2_Toggle;
                delay_ms(3000);
                LED3_Toggle;
                delay_ms(3000);
                LED4_Toggle;
        }
}
然后在按钮释放消息里调用它:
case WM_NOTIFICATION_RELEASED:
Fill();
break;
运行发现只要点击按钮进入循环,EMWIN的那些按钮都按不了了,整个界面好像都失去了焦点,我想点击按钮退出循环要怎么做?

回复

使用道具 举报

3

主题

66

回帖

75

积分

初级会员

积分
75
发表于 2020-11-19 12:03:39 | 显示全部楼层
你这个delay独占cpu了 还玩啥
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-19 14:45:00 | 显示全部楼层
78028048 发表于 2020-11-19 12:03
你这个delay独占cpu了 还玩啥

大神,那正确的做法是怎样的,给个思路,谢谢
回复

使用道具 举报

337

主题

2045

回帖

3061

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3061
发表于 2020-11-19 15:44:52 | 显示全部楼层
zxc19970106 发表于 2020-11-19 14:45
大神,那正确的做法是怎样的,给个思路,谢谢

你把delay 3000ms换成GUI_Delay(3000)就好了。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-19 17:23:35 | 显示全部楼层
caicaptain2 发表于 2020-11-19 15:44
你把delay 3000ms换成GUI_Delay(3000)就好了。

我想点击另一个按钮退出循环要怎么做,我用的是UCOSⅢ
回复

使用道具 举报

0

主题

221

回帖

221

积分

高级会员

积分
221
发表于 2020-11-19 22:36:25 | 显示全部楼层
UCOSⅢ 的话使用os提供的delay也可以,GUI_Delay最好放在一个单独的任务中去循环刷。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-20 10:06:41 | 显示全部楼层
这个简易功能,放emWin的定时器里面刷就好了。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 10:32:29 | 显示全部楼层
本帖最后由 caicaptain2 于 2020-11-20 11:12 编辑
eric2013 发表于 2020-11-20 10:06
这个简易功能,放emWin的定时器里面刷就好了。

你有个RTOS系统就更好处理了。 。。。 把点灯做成独立的任务,等待emwin发出来的notification信号就好了。 这是标准做法。

如果只是跑emwin,设个全局标志量,在emwin定时器消息里面根据标志量来点灯。
回复

使用道具 举报

20

主题

395

回帖

455

积分

高级会员

积分
455
发表于 2020-11-20 10:54:35 | 显示全部楼层
先找些入门的资料学习,买个开发板练练手,光用PC模拟很难理解单片机
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:20:05 | 显示全部楼层
h_007 发表于 2020-11-20 10:54
先找些入门的资料学习,买个开发板练练手,光用PC模拟很难理解单片机

已经在板子上跑了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-20 11:22:14 | 显示全部楼层
zxc19970106 发表于 2020-11-20 10:32
你有个RTOS系统就更好处理了。 。。。 把点灯做成独立的任务,等待emwin发出来的notification信号就好了 ...

emWin裸机版也是这么玩,很简单的。跟用不用RTOS没关系。
这种简单的LED功能也创建个消息通知和专门的任务就太浪费资源了,emWin定时器是最简单有效的,随时用随时删
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:23:45 | 显示全部楼层
zxc19970106 发表于 2020-11-20 10:32
你有个RTOS系统就更好处理了。 。。。 把点灯做成独立的任务,等待emwin发出来的notification信号就好了 ...

我有啊,就是用的UCOSⅢ操作系统,你说的独立任务是怎么弄?不太明白
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-20 11:25:55 | 显示全部楼层
zxc19970106 发表于 2020-11-20 11:23
我有啊,就是用的UCOSⅢ操作系统,你说的独立任务是怎么弄?不太明白

你两是一个人。。。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:32:09 | 显示全部楼层
eric2013 发表于 2020-11-20 11:25
你两是一个人。。。

没有那个是另一个人编辑了我的回复,那不是我发的
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:32:09 | 显示全部楼层
eric2013 发表于 2020-11-20 11:25
你两是一个人。。。

没有那个是另一个人编辑了我的回复,那不是我发的
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:32:09 | 显示全部楼层
eric2013 发表于 2020-11-20 11:25
你两是一个人。。。

没有那个是另一个人编辑了我的回复,那不是我发的
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:32:09 | 显示全部楼层
eric2013 发表于 2020-11-20 11:25
你两是一个人。。。

没有那个是另一个人编辑了我的回复,那不是我发的
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 11:38:47 | 显示全部楼层
eric2013 发表于 2020-11-20 11:22
emWin裸机版也是这么玩,很简单的。跟用不用RTOS没关系。
这种简单的LED功能也创建个消息通知和专门的任 ...

后续还会加上控制外设的功能,应该还是要弄个专门的任务
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-20 13:56:27 | 显示全部楼层
eric2013 发表于 2020-11-20 11:22
emWin裸机版也是这么玩,很简单的。跟用不用RTOS没关系。
这种简单的LED功能也创建个消息通知和专门的任 ...

case ID_BUTTON_2: // Notifications sent by 'Button'
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        WM_DeleteTimer(hTimer);
                        break;
                        }
                        break;
点击删除就卡死了,这是什么情况
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-21 09:42:11 | 显示全部楼层
zxc19970106 发表于 2020-11-20 13:56
case ID_BUTTON_2: // Notifications sent by 'Button'
                        switch(NCode) {
                        case WM_NOTIFICATION_C ...

hTimer要是有效的定时器句柄。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-23 11:03:52 | 显示全部楼层
eric2013 发表于 2020-11-21 09:42
hTimer要是有效的定时器句柄。

case WM_INIT_DIALOG:
                       
                       
                        hTimer = WM_CreateTimer(hItemPage1,ID_TimerControl,0,0);
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-23 13:50:05 | 显示全部楼层
eric2013 发表于 2020-11-21 09:42
hTimer要是有效的定时器句柄。

硬汉哥怎么用按钮来控制定时器啊,就是我想点击按钮开始循环,再按另一个结束循环
循环的代码:
void Fill(WM_MESSAGE * pMsg)
{
//        BUTTON_IsPressed(hItemPage1);
        while(1)
        {       
                LED2_Toggle;
                GUI_Delay(3000);
                LED2_Toggle;
                LED4_Toggle;
                GUI_Delay(3000);
                LED4_Toggle;
                LED3_Toggle;
                GUI_Delay(3000);
                LED3_Toggle;
                LED5_Toggle;
                GUI_Delay(3000);
                LED5_Toggle;
               
        }
       
}
然后在初始化消息里创建定时器:
case WM_INIT_DIALOG:
WM_CreateTimer(hItemPage1,ID_TimerData,1000,0);
WM_CreateTimer(hItemPage1,ID_TimerTime,1000,0);
hTimer = WM_CreateTimer(hItemPage1,ID_TimerControl,0,0);
定时器消息:
case WM_TIMER:
if(WM_GetTimerId(pMsg->Data.v) == ID_TimerData)
                                {
                                        hItemPage1 = WM_GetDialogItem(pMsg->hWin,ID_EDIT_1);
                                        EDIT_SetText(hItemPage1,Detectpressure);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
                                {
                                        Caculate_RTC(pMsg);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerControl)
                                {
                                        Fill(pMsg);
                                        WM_RestartTimer(pMsg->Data.v,100);
                                }
                               
                                break;
界面回调函数里的终止按钮回调函数:
case ID_BUTTON_2: // Notifications sent by 'Button'
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        WM_DeleteTimer(hTimer);                  //这里点击就卡死
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-23 15:23:05 | 显示全部楼层
zxc19970106 发表于 2020-11-23 13:50
硬汉哥怎么用按钮来控制定时器啊,就是我想点击按钮开始循环,再按另一个结束循环
循环的代码:
void F ...

代码稍完整点。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-23 15:52:03 | 显示全部楼层

界面回调函数代码:
static void _cbDialogPage1(WM_MESSAGE * pMsg)
{
                int          NCode;
                int          Id;
                WM_HWIN      hItemPage1 =pMsg->hWin;
                WM_HWIN                 hTimer;
                unsigned int i;

       
                u8 tbuf[20];
                switch (pMsg->MsgId) {
                case WM_PAINT:
                        GUI_SetBkColor(GUI_WHITE);
                        GUI_Clear();
                        DSO_Init(0);                                                //示波器界面初始化
                        break;

                case WM_INIT_DIALOG:
                       
                        WM_CreateTimer(hItemPage1,ID_TimerData,1000,0);
                        WM_CreateTimer(hItemPage1,ID_TimerTime,1000,0);
               
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"测试信息");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"产品条码");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"检测压力");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1, GUI_WHITE);
                        TEXT_SetText(hItemPage1,"当前压差");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"检测数量");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_5);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"合格品率");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_6);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"Kpa");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_7);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"Pa");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_8);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"PCS");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_9);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"%");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_10);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"泄露量");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_11);
                        TEXT_SetFont(hItemPage1,&GUI_FontHZ24);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"Pa");
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_12);
                        TEXT_SetFont(hItemPage1, &GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"0.0");
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_TEXT_13);
                        TEXT_SetFont(hItemPage1, &GUI_FontHZ32);
                        TEXT_SetTextColor(hItemPage1,GUI_WHITE);
                        TEXT_SetText(hItemPage1,"");
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
                        BUTTON_SetFont(hItemPage1,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItemPage1,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItemPage1,"测试记录");
                        WM_SetHasTrans(hItemPage1);
                        WM_SetCallback(hItemPage1,_cbButton);
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_1);
                        BUTTON_SetFont(hItemPage1,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItemPage1,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItemPage1,"参数设置");
                        WM_SetHasTrans(hItemPage1);
                        WM_SetCallback(hItemPage1,_cbButton);

                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_2);
                        BUTTON_SetFont(hItemPage1,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItemPage1,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItemPage1,"停  止");
                        WM_SetHasTrans(hItemPage1);
                        WM_SetCallback(hItemPage1,_cbButton);
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_3);
                        BUTTON_SetFont(hItemPage1,&GUI_FontHZ24);
                        BUTTON_SetTextColor(hItemPage1,BUTTON_CI_UNPRESSED,GUI_WHITE);
                        BUTTON_SetText(hItemPage1,"起  动");
                        WM_SetHasTrans(hItemPage1);
                        WM_SetCallback(hItemPage1,_cbButton);

                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);          // 编辑框
                        EDIT_SetFont(hItemPage1,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItemPage1, 500, 1);
                        EDIT_SetTextAlign(hItemPage1,GUI_TA_LEFT | GUI_TA_VCENTER);
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);          // 编辑框
                        EDIT_SetFont(hItemPage1,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItemPage1, 500, 1);
                        EDIT_SetTextAlign(hItemPage1,GUI_TA_LEFT | GUI_TA_VCENTER);
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_EDIT_2);          // 编辑框
                        EDIT_SetFont(hItemPage1,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItemPage1, 500, 1);
                        EDIT_SetTextAlign(hItemPage1,GUI_TA_LEFT | GUI_TA_VCENTER);
                       
                        hItemPage1 = WM_GetDialogItem(pMsg->hWin, ID_EDIT_3);          // 编辑框
                        EDIT_SetFont(hItemPage1,  &GUI_FontHZ32);
                        EDIT_EnableBlink(hItemPage1, 500, 1);
                       
                       
                        break;
                       
                        case WM_TIMER:
                                if(WM_GetTimerId(pMsg->Data.v) == ID_TimerData)
                                {
                                        hItemPage1 = WM_GetDialogItem(pMsg->hWin,ID_EDIT_1);
                                        EDIT_SetText(hItemPage1,Detectpressure);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
                                {
                                        Caculate_RTC(pMsg);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerControl)
                                {
                                        Fill(pMsg);
                                }
                               
                                break;
                               
                        case WM_NOTIFY_PARENT:
                        Id    = WM_GetId(pMsg->hWinSrc);
                        NCode = pMsg->Data.v;
                        switch(Id) {
                        case ID_EDIT_0:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_1:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_2:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_3:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        case ID_EDIT_4:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        //打开测试记录界面按钮
                        case ID_BUTTON_0:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        GUI_EndDialog(hItemPage1, 1);
                        CreateWindow2();
                        break;
                        }
                        break;
                        //打开参数设置界面按钮
                        case ID_BUTTON_1:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        GUI_EndDialog(hItemPage1, 1);
                        CreateWindow3();
                        break;
                        }
                        break;
                        //停止循环按钮
                        case ID_BUTTON_2:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        WM_DeleteTimer(ID_TimerControl);
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        break;
                        }
                        break;
                        //开始循环按钮
                        case ID_BUTTON_3:
                        switch(NCode) {
                        case WM_NOTIFICATION_CLICKED:
                        break;
                        case WM_NOTIFICATION_RELEASED:
                        WM_CreateTimer(hItemPage1,ID_TimerControl,0,0);
                        break;
                        }
                        break;
                       
                }
                        break;
                        default:
                        WM_DefaultProc(pMsg);
                        break;
        }
        }

WM_HWIN CreateWindow1(void) {
         WM_HWIN hWin;
         hWin = GUI_CreateDialogBox(_aDialogCreatePage1, GUI_COUNTOF(_aDialogCreatePage1), _cbDialogPage1, WM_HBKWIN, 0, 0);
         return hWin;
}
//背景窗口WM_HBKWIN回调函数
static void _cbBkWin(WM_MESSAGE* pMsg)
{
        switch(pMsg->MsgId)
        {
                        case WM_PAINT:
                        GUI_SetBkColor(GUI_BLUE);
                        GUI_Clear();
                        break;
                default:
                        WM_DefaultProc(pMsg);
        }
}
/*********************************************************************
*
*       主函数


void f_MainTask(void) {       
       
        GUI_Init();
       
        WM_SetCallback(WM_HBKWIN, _cbBkWin);
       
        WM_MULTIBUF_Enable(1);
       
        /* 第3步:绘制各种背景到存储设备 ***************************************************/
        hMemDSO = GUI_MEMDEV_CreateFixed(0,
                                         0,
                                         600,
                                         400,
                                                                         GUI_MEMDEV_HASTRANS,
                                                                         GUI_MEMDEV_APILIST_16,
                                                                         GUICC_M565);
                                                                         
       
        /* 绘制示波器窗口背景 */
        GUI_MEMDEV_Select(hMemDSO);
    DSO_DrawBakFrame(0,0,599,399);
        GUI_MEMDEV_Select(0);
       
        WM_HideWindow(WM_HBKWIN);
       
        DSO_Init(1);
       
        WM_ShowWindow(WM_HBKWIN);
       
        GUI_Exec();
       
        DSO_Graph();
       
        CreateWindow1();
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-24 02:31:31 | 显示全部楼层
zxc19970106 发表于 2020-11-23 15:52
界面回调函数代码:
static void _cbDialogPage1(WM_MESSAGE * pMsg)
{

WM_SetCallback(WM_HBKWIN, _cbBkWin);
      
        WM_MULTIBUF_Enable(1);

二选一
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-24 09:06:15 | 显示全部楼层
eric2013 发表于 2020-11-24 02:31
WM_SetCallback(WM_HBKWIN, _cbBkWin);
      
        WM_MULTIBUF_Enable(1);

我只用WM_MULTIBUF_Enable(1)也是卡死了,是不是这个WM_DeleteTimer(ID_TimerControl);句柄不对啊?
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-24 11:31:12 | 显示全部楼层
eric2013 发表于 2020-11-24 02:31
WM_SetCallback(WM_HBKWIN, _cbBkWin);
      
        WM_MULTIBUF_Enable(1);

您说的是使用内存设备和多缓冲二选一吧,可是我这里只用了WM_MULTIBUF_Enable(1)啊
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-25 10:05:27 | 显示全部楼层
问题出在这里了,这个Fill是个死循环,emWin直接卡死里面了。
  case WM_TIMER:
                                if(WM_GetTimerId(pMsg->Data.v) == ID_TimerData)
                                {
                                        hItemPage1 = WM_GetDialogItem(pMsg->hWin,ID_EDIT_1);
                                        EDIT_SetText(hItemPage1,Detectpressure);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerTime)
                                {
                                        Caculate_RTC(pMsg);
                                        WM_RestartTimer(pMsg->Data.v,1000);
                                }
                                else if(WM_GetTimerId(pMsg->Data.v) == ID_TimerControl)
                                {
                                        Fill(pMsg);
                                }


void Fill()
{
        while(1)
        {      
                LED2_Toggle;
                delay_ms(3000);
                LED3_Toggle;
                delay_ms(3000);
                LED4_Toggle;
        }
}


回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-25 10:22:33 | 显示全部楼层
eric2013 发表于 2020-11-25 10:05
问题出在这里了,这个Fill是个死循环,emWin直接卡死里面了。
  case WM_TIMER:
                        ...

void Fill(WM_MESSAGE * pMsg)
{
                LED2_Toggle;
                GUI_Delay(3000);
                LED2_Toggle;
                LED4_Toggle;
                GUI_Delay(3000);
                LED4_Toggle;
                LED3_Toggle;
                GUI_Delay(3000);
                LED3_Toggle;
                LED5_Toggle;
                GUI_Delay(3000);
                LED5_Toggle;
}
这样也卡死啊
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-11-25 10:50:42 | 显示全部楼层
eric2013 发表于 2020-11-25 10:05
问题出在这里了,这个Fill是个死循环,emWin直接卡死里面了。
  case WM_TIMER:
                        ...

我删除另外两个定时器也是卡死,这是怎么回事?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107642
QQ
发表于 2020-11-25 11:39:54 | 显示全部楼层
zxc19970106 发表于 2020-11-25 10:22
void Fill(WM_MESSAGE * pMsg)
{
                LED2_Toggle;

不是,我的意思你这么写是错误的写法。

这个帖子就交流这么多吧,结帖。
回复

使用道具 举报

22

主题

114

回帖

180

积分

初级会员

积分
180
 楼主| 发表于 2020-12-1 09:19:19 | 显示全部楼层
eric2013 发表于 2020-11-25 11:39
不是,我的意思你这么写是错误的写法。

这个帖子就交流这么多吧,结帖。

硬汉哥,那正确的写法是怎样的?给个思路
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-9 11:36 , Processed in 0.486474 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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