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 //估計一下任務最多佔用的大小設定


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章