硬汉嵌入式论坛

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

[emWin] eric2013,在窗口回调函数里面使用while的问题

[复制链接]

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
发表于 2014-6-24 14:48:25 | 显示全部楼层 |阅读模式
话不多说,直接上代码:
#include "includes.h"
#include "string.h"
#include "stdio.h"
/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_WINDOW_0     (GUI_ID_USER + 0x04)
#define MSG_CHANGE_TEXT     (WM_USER     + 0)
#define ID_BUTTON_0     (GUI_ID_USER + 0x01)
#define ID_BUTTON_1     (GUI_ID_USER + 0x02)
#define ID_TEXT_0     (GUI_ID_USER + 0x03)
#define ID_FRAMEWIN_1     (GUI_ID_USER + 0x00)
#define ID_BUTTON_2     (GUI_ID_USER + 0x01)
#define ID_BUTTON_3     (GUI_ID_USER + 0x02)
#define ID_BUTTON_4     (GUI_ID_USER + 0x05)
#define ID_TEXT_1     (GUI_ID_USER + 0x03)

#define ID_TIMER_WATCH0 (GUI_ID_USER + 0x08)
#define ID_TIMER_WATCH1 (GUI_ID_USER + 0x09)
#define ID_TIMER_WATCH2 (GUI_ID_USER + 0x10)
#define ID_TIMER_WATCH3 (GUI_ID_USER + 0x11)
#define ID_FRAMEWIN_0     (GUI_ID_USER + 0x2B)


#define CHANNEL_NUM 32
static int GA_START_FLAG=0,
                     GB_START_FLAG=0,
                     FLAG_STOP_A=0,
                     FLAG_STOP_B=0;
/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

static WM_HWIN hPage1,hPage2;


/*********************************************************************
*
*       _aDialogCheck
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCheck[] = {
    { FRAMEWIN_CreateIndirect, "Group", ID_FRAMEWIN_1, 0, 0, 800, 480, 0, 0x0, 0 },
    { BUTTON_CreateIndirect, "START", ID_BUTTON_2, 710, 10, 80, 130, 0, 0x0, 0 },
    { BUTTON_CreateIndirect, "STOP", ID_BUTTON_3, 710, 145, 80, 130, 0, 0x0, 0 },
    { BUTTON_CreateIndirect, "BACK", ID_BUTTON_4, 710, 280, 80, 130, 0, 0x0, 0 },
    { MULTIPAGE_CreateIndirect, "Multipage", GUI_ID_MULTIPAGE0, 0, 0, 700, 412, 0, 0x0, 0 },
};


static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
    { WINDOW_CreateIndirect,    "A", 0, 0,   0, 700, 415, 0 },
    { LISTVIEW_CreateIndirect, " ", GUI_ID_LISTVIEW0, 0,0, 520, 430, 0, 0x0, 0 },
    { TEXT_CreateIndirect, &quotAGE A", GUI_ID_TEXT0, 571, 274, 80, 20, 0, 0x0, 0 },
};
#if CHANNEL_NUM > 8
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
    { WINDOW_CreateIndirect,    "B", 0,                   0,   0, 700, 415, 0 },
    { LISTVIEW_CreateIndirect, "", GUI_ID_LISTVIEW1, 0,0, 520, 430, 0, 0x0, 0 },
    { TEXT_CreateIndirect, &quotAGE B", GUI_ID_TEXT1, 571, 274, 80, 20, 0, 0x0, 0 },
};
#endif





static void _cbDialogPage1(WM_MESSAGE * pMsg) {
  WM_HWIN hWin,hListView;
  HEADER_Handle hHeader;
  hWin = pMsg->hWin;
  hPage1 = hWin;
  switch (pMsg->MsgId) {
    case WM_INIT_DIALOG:
        WM_SetFocus(hWin);
        //
        //A×éμÄ8¸öí¨μà¼ì2aáD±í
        //
        hListView = WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0);
        LISTVIEW_SetTextAlign(hListView, 0 , GUI_TA_CENTER | GUI_TA_VCENTER);
        hHeader = LISTVIEW_GetHeader(hListView);
        HEADER_SetHeight(hHeader, 48);
        LISTVIEW_AddColumn(hListView, 172, "CHANNEL", GUI_TA_CENTER | GUI_TA_VCENTER);
        LISTVIEW_AddColumn(hListView, 172, "ABS", GUI_TA_CENTER | GUI_TA_VCENTER);
        LISTVIEW_AddColumn(hListView, 172, "STATUS", GUI_TA_CENTER | GUI_TA_VCENTER);
        LISTVIEW_SetBkColor(hListView, 0, GUI_YELLOW);
        LISTVIEW_SetGridVis(hListView, 1);
        LISTVIEW_SetRowHeight(hListView, 46);
   
        break;
  case WM_PAINT:
        GUI_SetBkColor(GUI_GREEN);
        GUI_Clear();
        break;
  case WM_TOUCH_CHILD://μã»÷±à¼-¿òDT¸ÄÎÄ×Ö
        break;
  case WM_NOTIFY_PARENT:
        break;
  default:
        WM_DefaultProc(pMsg);
    break;
  }
}
#if CHANNEL_NUM > 8
//B×é½çÃæ
static void _cbDialogPage2(WM_MESSAGE * pMsg) {
  WM_HWIN hWin,hListView;
  HEADER_Handle hHeader;
  hWin = pMsg->hWin;
  hPage2 = hWin;
  switch (pMsg->MsgId) {
        case WM_INIT_DIALOG:
            //
            //B×éμÄ8¸öí¨μà¼ì2aáD±í
            //
            hListView = WM_GetDialogItem(hWin,GUI_ID_LISTVIEW1);
            LISTVIEW_SetTextAlign(hListView, 0 , GUI_TA_CENTER | GUI_TA_VCENTER);
            hHeader = LISTVIEW_GetHeader(hListView);
            HEADER_SetHeight(hHeader, 48);
            LISTVIEW_AddColumn(hListView, 172, "CHANNEL", GUI_TA_CENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hListView, 172, "ABS", GUI_TA_CENTER | GUI_TA_VCENTER);
            LISTVIEW_AddColumn(hListView, 172, "STATUS", GUI_TA_CENTER | GUI_TA_VCENTER);
            LISTVIEW_SetBkColor(hListView, 0, GUI_YELLOW);
            LISTVIEW_SetGridVis(hListView, 1);
            LISTVIEW_SetRowHeight(hListView, 46);
            break;
        case WM_TOUCH_CHILD:
            break;
        case WM_PAINT:
            GUI_SetBkColor(GUI_GREEN);
            GUI_Clear();
            break;
        case WM_NOTIFY_PARENT:
            break;
        default:   
            WM_DefaultProc(pMsg);  
            break;
    }
}
#endif


/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialogCheck(WM_MESSAGE * pMsg)
{
   
  WM_HWIN hDialog;
  int     NCode;
  int     Id,sel;     
  WM_HWIN hWin,hItem;
  hWin = pMsg->hWin;
  
  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
        //
        // Initialization of 'Framewin'
        //
        FRAMEWIN_SetTitleHeight(hWin, 30);
        FRAMEWIN_SetTextAlign(hWin, GUI_TA_HCENTER | GUI_TA_VCENTER);

        FRAMEWIN_SetBarColor(hWin, 0, GUI_BLUE);  
        FRAMEWIN_SetBarColor(hWin, 1, GUI_BLUE);
        WM_MakeModal(hWin);
        //
        // Initialization of 'Multipage'
        //
        hItem = WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0);

        //
        // Create and attach the MULTIPAGE dialog windows
        //

        hDialog = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialogPage1,       WM_UNATTACHED, 0, 0);
        MULTIPAGE_AddPage(hItem, hDialog, "       A      ");
        #if CHANNEL_NUM > 8
        hDialog = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), _cbDialogPage2,       WM_UNATTACHED, 0, 0);
        MULTIPAGE_AddPage(hItem, hDialog, "       B      ");
        #endif   

        MULTIPAGE_SelectPage(hItem, 0);
        MULTIPAGE_SetAlign(hItem, MULTIPAGE_ALIGN_LEFT | MULTIPAGE_ALIGN_BOTTOM);
    break;
  case WM_PAINT:
        GUI_SetBkColor(GUI_GRAY);
        GUI_Clear();
        break;
   
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_2: //
            printf("¿aê¼±»μã»÷áË\r\n");
      switch(NCode) {
        case WM_NOTIFICATION_RELEASED:
          sel = MULTIPAGE_GetSelection(WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0));
          switch(sel){
              case 0://A?
                    /**/
                {//疑问处1:此处大括号内的内容
                    if(GA_START_FLAG == 1)
                    {
                        printf("A×éòѾ-¿aê¼\r\n");
                        printf("sel _GA_START_FLAG =%d _GB_START_FLAG =%d \r\n", GA_START_FLAG, GB_START_FLAG);
                        
                    }               
                    else  
                    {
                        printf("A×é¿aê¼±»μã»÷áË\r\n");
                        GA_START_FLAG = 1;
                    }        
                }                    
                    break;
            
              case 1://B?
                    
                    break;

            }
          /**/
            {//疑问处2:此处大括号内的内容
                while((GA_START_FLAG==1) || (GB_START_FLAG==1) )
                {
                    printf("ÎòÔú¼ì2a°¡...\r\n");
                    printf("while _GA_START_FLAG =%d _GB_START_FLAG =%d \r\n", GA_START_FLAG, GB_START_FLAG);

                    GUI_Delay(1000);
               
                }
            }
            break;
      }
      break;
    case ID_BUTTON_3: //
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
          sel = MULTIPAGE_GetSelection(WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0));
          switch(sel)
          {
                case 0:
                GA_START_FLAG = 0;
                FLAG_STOP_A = 1;

                break;

                case 1:
                GB_START_FLAG = 0;
                FLAG_STOP_B = 1;

                break;


      }
        }
      break;
    case ID_BUTTON_4: //
      switch(NCode) {
      case WM_NOTIFICATION_RELEASED:
                if((GA_START_FLAG==0) && (GB_START_FLAG==0) ){
                    GUI_EndDialog(hWin, 0);
                    hPage1=0;hPage2=0;
                }
        break;
      }
      break;   
    }

    break;

default:
    WM_DefaultProc(pMsg);
    break;
  }

}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/

void MainTask(void) {
     GUI_Init();
     WM_EnableMemdev(WM_HBKWIN);
     WM_SetCallback(WM_HBKWIN, &_cbDialogCheck); /* Use own callback routine for background window */
   GUI_CreateDialogBox(_aDialogCheck, GUI_COUNTOF(_aDialogCheck), _cbDialogCheck, 0, 0, 0);
     while (1) {
    GUI_Exec();
  }
}

/*************************** End of file ****************************/


界面效果如图:

运行效果

运行效果


君请看,疑问处1和疑问处2都是只是操作了定义的两个全局标志,如果就上面的代码运行后,点击START按钮6次!固定的6次!后进入HardFault_Handler,经测试屏蔽疑问处2的代码后点击START按钮无异常,我觉得这就关系到emWin的回调机制了!
问:在回调函数里面能使用while吧,我有个其他界面的回调就是用的while也没出现问题啊,可是这一个我再解决不了啦,求助大咖如何搞正常啦!!!!?
再附个件,方便大家给运行测试! HelloWorld.zip (3 KB, 下载次数: 50)
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-6-24 15:11:38 | 显示全部楼层
你问题写的很详细,我解答起来也方便,晚上我测试下。
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-24 15:20:25 | 显示全部楼层
[s:148] 这就是默默支持的理由,3Q!
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-25 08:26:15 | 显示全部楼层
加个问题:listview加了时尚皮肤为何header的高度就设置不了啊?[s:152]
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-25 08:50:25 | 显示全部楼层
再加个问题:我想使用407的USART6来驱动一个嵌入式热敏打印机,打印机是有CTS(就是打印机判忙的引脚)控制的,该如何配置啊?USART6不使用CTS而用成printf输出测试无问题。
之前测试的用使用printf的配置给打印机发字符串烧坏了2个打印机了,好贵的啊,CTS脚当成读取一般的IO口来读电平测试也没成功,
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-6-25 20:29:39 | 显示全部楼层

回 ewindiors 的帖子

ewindiors:加个问题:listview加了时尚皮肤为何header的高度就设置不了啊?[s:152]  (2014-06-25 08:26) 
也许是个bug。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-6-25 20:30:44 | 显示全部楼层

回 ewindiors 的帖子

ewindiors:再加个问题:我想使用407的USART6来驱动一个嵌入式热敏打印机,打印机是有CTS(就是打印机判忙的引脚)控制的,该如何配置啊?USART6不使用CTS而用成printf输出测试无问题。
之前测试的用使用printf的配置给打印机发字符串烧坏了2个打印机了,好贵的啊,CTS脚当成读取一般的IO口来 .. (2014-06-25 08:50) 
这个是不是得需要做硬件流控制了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-6-25 20:58:47 | 显示全部楼层
不好意思啊,你的这个代码我在模拟器上面试,的确是有问题,我这里暂时也没有找到原因。提示这个错误:
1.png
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-26 08:47:27 | 显示全部楼层

回 eric2013 的帖子

eric2013:不好意思啊,你的这个代码我在模拟器上面试,的确是有问题,我这里暂时也没有找到原因。提示这个错误:

 (2014-06-25 20:58) 
就是啊,奇了个怪了,之前还有个多定义了一个int的全局变量导致其它某个固定的全局变量的值意外改变的怪现象,而堆栈是够用的咯。
继续研究,有消息了通知下,3Q!
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-26 08:49:21 | 显示全部楼层

回 eric2013 的帖子

eric2013:这个是不是得需要做硬件流控制了。 (2014-06-25 20:30) 
有没关于硬件流控的代码咯,度娘了一把基本没有啊?
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-6-26 09:37:48 | 显示全部楼层
为证明这种在回调里面使用while可行且可全局标志控制,再发个上面说的“有个while可运行的界面”,现补个附件咯 HelloCity.zip (2 KB, 下载次数: 36) ,望大家下载测试!希望关注!早日结贴![s:148]
回复

使用道具 举报

0

主题

20

回帖

20

积分

新手上路

积分
20
发表于 2014-7-8 17:32:04 | 显示全部楼层

回 ewindiors 的帖子

ewindiors:为证明这种在回调里面使用while可行且可全局标志控制,再发个上面说的“有个while可运行的界面”,现补个附件咯,望大家下载测试!希望关注!早日结贴![s:148]

 (2014-06-26 09:37) 
顺便请教您一个问题,您在iconview中icon下面的的中文图标名称是用什么方式实现的,能做个简单的教程吗,谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-7-8 17:33:05 | 显示全部楼层

回 weiyongwill 的帖子

weiyongwill:顺便请教您一个问题,您在iconview中icon下面的的中文图标名称是用什么方式实现的,能做个简单的教程吗,谢谢 (2014-07-08 17:32) 
设置Font为汉字,然后直接显示即可。
回复

使用道具 举报

8

主题

57

回帖

18

积分

初级会员

总是眼真真,勤习庄庄点将蠢!

积分
18
 楼主| 发表于 2014-7-8 23:29:15 | 显示全部楼层
eric2013他们的问题都好解决啊,怎么我的问题都是这么极品的咯?难道真是我人品不好?早点测试下这个啊![s:152]

10楼有使用while(1)可正常运行的代码!求下载!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107217
QQ
发表于 2014-7-9 10:21:16 | 显示全部楼层

回 ewindiors 的帖子

ewindiors:eric2013他们的问题都好解决啊,怎么我的问题都是这么极品的咯?难道真是我人品不好?早点测试下这个啊![s:152]

10楼有使用while(1)可正常运行的代码!求下载! (2014-07-08 23:29) 
首先感谢兄弟对我们支持,这个问题前段时间我尝试了,不行,后面我再试试,这周要发布10期emWin提高篇教程要花些时间。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 16:54 , Processed in 0.338296 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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