硬汉嵌入式论坛

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

[emWin] 求助:裸跑,WM_Exec()后卡住

[复制链接]

1

主题

7

回帖

1

积分

新手上路

积分
1
发表于 2017-6-7 13:05:45 | 显示全部楼层 |阅读模式
初学STemWIN,用GUIBuilder4.0做了个对话框,里面只有一个按钮,在系统下,执行WM_Exec(),后面的程序正常运行;到了裸跑时执行WM_Exec(),能显示出正确窗口,但是程序就此卡住,后面的都不执行了。哪位大神遇到过这事?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-6-7 13:07:41 | 显示全部楼层
方便的话,看下你的代码。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:10:55 | 显示全部楼层
#include "system.h"
#include "SysTick.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "beep.h"
#include "lcd_driver.h"
#include "touch.h"
#include "timer.h"
#include "flash.h"
#include "sram.h"
#include "malloc.h"
#include "GUI.h"
#include "WM.h"
#include "GUIDemo.h"
#include "FramewinDLG.h"
#include "FramewinDLG2.h"

ErrorStatus  HSEStartUpStatus;

int main()
{      
    Systick_Init(72);
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    USART1_Init(9600);
   
    TFTLCD_Init();            //LCD初始化   
    KEY_Init();                 //按键初始化
    BEEP_Init();            //初始化蜂鸣器
    FSMC_SRAM_Init();        //初始化SRAM
   
    my_mem_init(SRAMIN);     //初始化内部内存池
    my_mem_init(SRAMEX);      //初始化外部内存池
    FLASH_Init();
    TOUCH_Init();                //触摸屏初始化
    TIM3_Int_Init(999,71);    //1KHZ 定时器1ms
    TIM6_Int_Init(999,719);    //10ms中断
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC,ENABLE);//使能CRC时钟,否则STemWin不能使用

    LED_Init();
    GPIO_ResetBits(GPIOC,GPIO_Pin_1);
   
    GUI_Init();
   
    WM_SetCreateFlags(WM_CF_MEMDEV);

    CreateFramewin();
   
    GPIO_SetBits(GPIOC, GPIO_Pin_0);   
   
    while(1)
    {
        delay_ms(2000);
        GPIO_SetBits(GPIOC, GPIO_Pin_1);
        delay_ms(2000);
        GPIO_ResetBits(GPIOC, GPIO_Pin_1);
    }
}
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:12:09 | 显示全部楼层
CreateFramewin();  
GUI_Exec();  //加上这句之后就会卡住,GPIOC-1接的灯就不闪了
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:14:46 | 显示全部楼层
// USER START (Optionally insert additional includes)
// USER END

#include "DIALOG.h"

/*********************************************************************
*
*       Defines
*
**********************************************************************
*/
#define ID_FRAMEWIN_0     (GUI_ID_USER + 0x00)
#define ID_BUTTON_0     (GUI_ID_USER + 0x01)
#define ID_EDIT_0     (GUI_ID_USER + 0x02)


// USER START (Optionally insert additional defines)
// USER END

/*********************************************************************
*
*       Static data
*
**********************************************************************
*/

// USER START (Optionally insert additional static data)
// USER END

/*********************************************************************
*
*       _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
  { FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, -2, 450, 320, 0, 0x0, 0 },
  { BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 180, 187, 80, 20, 0, 0x0, 0 },
  { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 182, 87, 80, 20, 0, 0x64, 0 },
  // USER START (Optionally insert additional widgets)
  // USER END
};

/*********************************************************************
*
*       Static code
*
**********************************************************************
*/

// USER START (Optionally insert additional static code)
// USER END

/*********************************************************************
*
*       _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
  WM_HWIN hItem;
  int     NCode;
  int     Id;
  // USER START (Optionally insert additional variables)
  // USER END

  switch (pMsg->MsgId) {
  case WM_INIT_DIALOG:
    //
    // Initialization of 'Edit'
    //
    hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
    EDIT_SetText(hItem, "123");
    // USER START (Optionally insert additional code for further widget initialization)
    // USER END
    break;
  case WM_NOTIFY_PARENT:
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id) {
    case ID_BUTTON_0: // Notifications sent by 'Button'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    case ID_EDIT_0: // Notifications sent by 'Edit'
      switch(NCode) {
      case WM_NOTIFICATION_CLICKED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_RELEASED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      case WM_NOTIFICATION_VALUE_CHANGED:
        // USER START (Optionally insert code for reacting on notification message)
        // USER END
        break;
      // USER START (Optionally insert additional code for further notification handling)
      // USER END
      }
      break;
    // USER START (Optionally insert additional code for further Ids)
    // USER END
    }
    break;
  // USER START (Optionally insert additional message handling)
  // USER END
  default:
    WM_DefaultProc(pMsg);
    break;
  }
}

/*********************************************************************
*
*       Public code
*
**********************************************************************
*/
/*********************************************************************
*
*       CreateFramewin
*/
WM_HWIN CreateFramewin(void);
WM_HWIN CreateFramewin(void) {
  WM_HWIN hWin;

  hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
  return hWin;
}

// USER START (Optionally insert additional public code)
// USER END

/*************************** End of file ****************************/
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:15:28 | 显示全部楼层
这个文件是GUI_Builder保存的,没改过
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-6-7 13:17:54 | 显示全部楼层

回 freefishzyq 的帖子

freefishzyq:CreateFramewin();  
GUI_Exec();  //加上这句之后就会卡住,GPIOC-1接的灯就不闪了
 (2017-06-07 13:12) 
初始化之后先显示个背景色,显示个文本,看看能够显示出来不。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:20:43 | 显示全部楼层
GPIO_ResetBits(GPIOC,GPIO_Pin_1);
   
    GUI_Init();
   
    WM_SetCreateFlags(WM_CF_MEMDEV);

    FRONT_COLOR=RED;
    LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"STemWin Base Project!");

    //CreateFramewin();
    //GUI_Exec();
   
    GPIO_SetBits(GPIOC, GPIO_Pin_0);   
   
    while(1)
    {
        delay_ms(2000);
        GPIO_SetBits(GPIOC, GPIO_Pin_1);
        delay_ms(2000);
        GPIO_ResetBits(GPIOC, GPIO_Pin_1);
    }

完全正常,可以显示,灯也闪
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-6-7 13:23:38 | 显示全部楼层

回 freefishzyq 的帖子

freefishzyq:GPIO_ResetBits(GPIOC,GPIO_Pin_1);
    
    GUI_Init();
    
    WM_SetCreateFlags(WM_CF_MEMDEV);
....... (2017-06-07 13:20) 
不是这个函数LCD_ShowString。

是emWin自己的API函数,用emWin自己的API函数试试,刷个屏,显示个字符。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:26:37 | 显示全部楼层
GUI_Init();

    WM_SetCreateFlags(WM_CF_MEMDEV);

    GUI_SetBkColor(GUI_BLUE);
    GUI_Clear();
    GUI_SetFont(&GUI_Font24_ASCII);
    GUI_SetColor(GUI_YELLOW);
    GUI_DispString("Hello World!\\n");

    //FRONT_COLOR=RED;
    //LCD_ShowString(10,10,tftlcd_data.width,tftlcd_data.height,16,"STemWin Base Project!");
    //CreateFramewin();
    //GUI_Exec();

    GPIO_SetBits(GPIOC, GPIO_Pin_0);   

    while(1)
    {
        delay_ms(2000);
        GPIO_SetBits(GPIOC, GPIO_Pin_1);
        delay_ms(2000);
        GPIO_ResetBits(GPIOC, GPIO_Pin_1);
    }

完全正常,刷成蓝屏,黄字显示。灯闪正常

这时候加上GUI_Exec(); 不会卡住,灯闪
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-6-7 13:41:45 | 显示全部楼层

回 freefishzyq 的帖子

freefishzyq:GUI_Init();

    WM_SetCreateFlags(WM_CF_MEMDEV);

    GUI_SetBkColor(GUI_BLUE);
....... (2017-06-07 13:26)
这么神奇,你的GUI_X.C文件里面做了emWin的时间基准更新了没有。

另外就是调整状态跟踪下代码,使用窗口的话要使用16bpp的底层函数,如果你用的通用移植方法,这个bug非常好找,如果是官方自带的要麻烦些。

主要就是这两个问题了,别的没什么问题了。
回复

使用道具 举报

1

主题

7

回帖

1

积分

新手上路

积分
1
 楼主| 发表于 2017-6-7 13:45:40 | 显示全部楼层
[s:143] 谢谢。我找找看
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-6-8 02:27:16 | 显示全部楼层

回 freefishzyq 的帖子

freefishzyq:[s:143] 谢谢。我找找看 (2017-06-07 13:45) 
[s:130]
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-19 15:19 , Processed in 0.045279 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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