uC/OS-II uC/GUI 程序卡死在WM_ExecIdle();

在Keil4.7a编写了 STM32基于uC/OS-II 、uC/GUI结合使用的一个工程,关键代码如下:

void UI_Display(void)
{ 
    WM_HWIN hWin1,hWin2,hWin3; 
unsigned int curs,key,num;
BUTTON_Handle  _ahButton[7];    
//   unsigned char c,d;
//   unsigned int temp;
//   unsigned long tm;
         
  GUI_CURSOR_Show();//显示鼠标
  WM_SetCreateFlags(WM_CF_MEMDEV);     /* Automatically use memory devices on all windows */  
//   d=1; c=1;      
  GUI_SetBkColor(GUI_RED);         //设置背景色
  GUI_SetColor(GUI_WHITE);             //设置前景色
  GUI_Clear();                     //清屏
  curs=0x00;
  hWin2=FRAMEWIN_Create("当前日期", 0, WM_CF_SHOW,   0,   0,319, 35);             //建立FRAME2    
  FRAMEWIN_SetFont(hWin2, &GUI_FontHZ_FangSong_GB2312_24);                        //设置字体
      
  hWin3=FRAMEWIN_Create("当前时间",0, WM_CF_SHOW,   53,   100, 266, 35);          //建立FRAME3
  FRAMEWIN_SetFont(hWin3, &GUI_FontHZ_FangSong_GB2312_24);                        //设置字体
      
  hWin1=FRAMEWIN_Create("星期",0, WM_CF_SHOW,   0,   100, 52, 35);                  //建立FRAME1
  FRAMEWIN_SetFont(hWin1, &GUI_FontHZ_FangSong_GB2312_24);                        //设置字体
        
  FRAMEWIN_SetTextAlign(hWin1,GUI_TA_HCENTER);                                    //Frame1 文本中间对齐
  FRAMEWIN_SetTextAlign(hWin2,GUI_TA_HCENTER);                                    //Frame2 文本中间对齐
  FRAMEWIN_SetTextAlign(hWin3,GUI_TA_HCENTER);                                    //Frame3 文本中间对齐
        
  //建立按键F1-F5   
  _ahButton[0] = BUTTON_Create(0, 200, 64,40, GUI_KEY_F1 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  _ahButton[1] = BUTTON_Create(64, 200, 64,40, GUI_KEY_F2 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  _ahButton[2] = BUTTON_Create(128, 200, 64,40, GUI_KEY_F3 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  _ahButton[3] = BUTTON_Create(192, 200, 64,40, GUI_KEY_F4 , WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
  _ahButton[4] = BUTTON_Create(256, 200, 64,40, GUI_KEY_F5, WM_CF_SHOW | WM_CF_STAYONTOP | WM_CF_MEMDEV);
      
        
   //按键字体设置 
  BUTTON_SetFont(_ahButton[0],&GUI_FontHZ_FangSong_GB2312_24);
  BUTTON_SetFont(_ahButton[1],&GUI_FontHZ_FangSong_GB2312_24);
  BUTTON_SetFont(_ahButton[2],&GUI_FontHZ_FangSong_GB2312_24);
  BUTTON_SetFont(_ahButton[3],&GUI_FontHZ_FangSong_GB2312_24);
  BUTTON_SetFont(_ahButton[4],&GUI_FontHZ_FangSong_GB2312_24);
      
   //按键背景色设置 
  BUTTON_SetBkColor(_ahButton[0],0,GUI_GREEN);                                 
  BUTTON_SetBkColor(_ahButton[1],0,GUI_GREEN);  
  BUTTON_SetBkColor(_ahButton[2],0,GUI_GREEN);  
  BUTTON_SetBkColor(_ahButton[3],0,GUI_GREEN);  
  BUTTON_SetBkColor(_ahButton[4],0,GUI_GREEN);  
         
   //按键前景色设置 
  BUTTON_SetTextColor(_ahButton[0],0,GUI_WHITE); 
  BUTTON_SetTextColor(_ahButton[1],0,GUI_WHITE);
  BUTTON_SetTextColor(_ahButton[2],0,GUI_WHITE);
  BUTTON_SetTextColor(_ahButton[3],0,GUI_WHITE);
  BUTTON_SetTextColor(_ahButton[4],0,GUI_WHITE);
           
          
  num=0;
    while(1)
    {
    WM_ExecIdle();                                   //刷新屏幕
        OSTimeDlyHMSM(0,0,2,0);
    }
}
经过任务1调用上面程序,代码如下

/********************************************************************************* 
 * 函数名:Task_1
 * 描述  : 任务
 * 输入  :*p_arg
 * 输出  : 无
*********************************************************************************/
void Task_1(void *p_arg)
{
    (void)p_arg; 
    
    while (1)
    {
        UI_Display();
    }
}
编译,链接,下载,发现程序莫名其妙的不能执行,任务不能切换。
反复调试,仿真后发现程序卡死在WM_ExecIdle();
问题关键如下:
/************设置栈大小(单位为 OS_STK )************/
#define TASK_1_STK_SIZE           128
任务1的栈空间太小无法,满足函数的需要,就发生了卡死。
问题解决办法如下:
/************设置栈大小(单位为 OS_STK )************/
#define TASK_1_STK_SIZE           2046 //估计一下任务最多占用的大小设定


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gui_x_ucosii.c是一个使用uC/OS-II实现的GUI驱动文件。在嵌入式系统中,GUI(图形用户界面)用于实现用户交互和图形显示,并且需要与操作系统进行良好的集成。 这个驱动文件的作用是将GUIuC/OS-II操作系统进行整合和协调。它提供了一系列的函数和接口,用于在uC/OS-II环境下实现GUI的初始化、操作和事件处理等功能。 该文件主要包含以下几个重要的函数: 1. GUI_X_Init():该函数用于初始化GUI驱动。在uC/OS-II中,它会创建一个用于GUI任务的操作系统任务,并为任务分配堆栈和优先级等资源。 2. GUI_X_ExecIdle():该函数用于执行GUI的空闲处理。在uC/OS-II中,当没有其他任务可以执行时,系统会调用此函数。在该函数中,可以执行一些无关紧要的图形操作,如屏幕保护等。 3. GUI_X_GetTaskId():该函数用于获取当前任务的ID。在uC/OS-II中,每个任务都有一个唯一的ID,通过该函数可以获取当前GUI任务的ID。 4. GUI_X_WaitEvent():该函数用于等待GUI事件的发生。在uC/OS-II中,任务可以通过事件标志或消息队列等方式等待事件的发生,而GUI任务通常会使用此函数来等待鼠标点击、键盘输入等事件的发生。 通过这些函数和接口,gui_x_ucosii.c文件实现了GUI驱动与uC/OS-II操作系统的良好集成,使得我们可以在uC/OS-II环境下方便地开发和使用GUI功能。它为我们提供了一种简单、高效的方式来实现嵌入式系统中的图形界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值