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 //估计一下任务最多占用的大小设定


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值