硬汉嵌入式论坛

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

[μCGUI] 请教ucGUI uCOS时进入HardFault_Handler的问题

[复制链接]

6

主题

9

回帖

6

积分

新手上路

积分
6
发表于 2013-7-19 11:37:42 | 显示全部楼层 |阅读模式
我用uCGUI 和uCOS实现了几个任务了,还算稳定,接着想再加入一个任务Task_Calculator:就是一个对话框 点击退出按钮后,进入主界面,在进入其他任务的时候就死机了,进入HardFault_Handler里面去了,但是反复进入Task_Calculator任务不会死机,没有建立Task_Calculator这个任务之前都挺稳定的,不知道哪里不合适啊,关键的代码在下面,看看我哪里不对了...谢谢了啊
Stack_Size      EQU     0x00001000
#define GUI_ALLOC_SIZE          20000  /* Size of dynamic memory ... For WM and memory devices*/
//上面这俩应该够大了吧?


#define       STARTUP_TASK_PRIO         55//设置启动任务的优先级
#define       TASK_MENU_PRIO               30
#define       TASK_MusicPlayer_Prio        15
#define       TASK_PhotoBro_Prio           16
#define       TASK_TextBro_Prio            17         
#define       TASK_Time_Prio               18
#define       TASK_Calculator_Prio         14
#define       TASK_TOUCH_PRIO              2
#define       TASK_PlaySong_Prio            1  //音乐播放器任务

#define       TASK_PlaySong_STK_SIZE                   700      //音乐播放器任务
#define       STARTUP_TASK_STK_SIZE                 100 //设置栈大小 单位OS_STK
#define       TASK_TOUCH_STK_SIZE                  500
#define       TASK_MENU_STK_SIZE                   600
#define       TASK_MusicPlayer_STK_SIZE            700
#define       TASK_PhotoBro_STK_SIZE                   700
#define       TASK_TextBro_STK_SIZE             600
#define       TASK_Time_STK_SIZE                  600
#define       TASK_Calculator_STK_SIZE              200  //就是这个任务有问题



APP.C里面的代码:

//任务堆栈声明
OS_STK   TASK_TOUCH_STK[TASK_TOUCH_STK_SIZE]; //定义栈
OS_STK   TASK_MENU_STK[TASK_MENU_STK_SIZE];
OS_STK   TASK_MusicPlayer_STK[TASK_MusicPlayer_STK_SIZE];
OS_STK   TASK_PhotoBro_STK[TASK_PhotoBro_STK_SIZE];
OS_STK   TASK_TextBro_STK[TASK_TextBro_STK_SIZE];
OS_STK   TASK_Time_STK[TASK_Time_STK_SIZE];
OS_STK   TASK_Calculator_STK[TASK_Calculator_STK_SIZE];


void   Task_Start(void*p_arg)
{        
        (void)p_arg;  //p_arg没有用到 防止编译器报警
        OSTaskCreate(Task_Touch,(void*)0,&TASK_TOUCH_STK[TASK_TOUCH_STK_SIZE-1],TASK_TOUCH_PRIO);
        OSTaskCreate(Task_Menu,(void*)0,&TASK_MENU_STK[TASK_MENU_STK_SIZE-1],TASK_MENU_PRIO);
        while(1)
        {
                    LED1(ON);        
                OSTimeDlyHMSM(0,0,0,300);
                LED1(OFF);
                OSTimeDlyHMSM(0,0,0,300);
        }   
}


void  Task_Touch(void*p_arg)
{
        GUI_PID_STATE   TouchPoint;
        (void)p_arg;
        while(1)
        {               
                GUI_TOUCH_Exec();
                GUI_TOUCH_GetState(&TouchPoint);
                if (TouchPoint.Pressed)
                {
                        if(TouchFlag == TouchUnPressed)
                        {
                                TouchFlag = TouchPress;
                        }

                }
                else
                {
                        if(TouchFlag == TouchPressed)
                        {
                                TouchFlag = TouchUnPress;   
                        }
                }   
                GUI_Exec();//重绘        
                OSTimeDlyHMSM(0,0,0,10);                     
        }        
}


void  Task_Menu(void*p_arg)
{
        (void)p_arg;
        MainMenu_Init();
        while(1)
        {        
                if((Menu_ID==MainMenu_ID)&&TouchCmd==1) //为了区分当前的界面
                {        
                        TouchCmd = 0;
                        switch(GUI_GetKey())
                        {
                                case GUI_ID_BUTTON0:
                                        Out_MainMenu();     //退出菜单界面 并创造mp3界面
                                        OSTaskCreate(Task_MusicPlayer,(void *)0,&TASK_MusicPlayer_STK[TASK_MusicPlayer_STK_SIZE-1],TASK_MusicPlayer_Prio);
                                        break;
                                case GUI_ID_BUTTON1:   //计算器
                                        Out_MainMenu();
                                        OSTaskCreate(Task_Calculator,(void *)0,&TASK_Calculator_STK[TASK_Calculator_STK_SIZE-1],TASK_Calculator_Prio);
                                        break;
                                case GUI_ID_BUTTON3:  //浏览相册功能bmp图片
                                        Out_MainMenu();
                                        OSTaskCreate(Task_PhotoBro,(void *)0,&TASK_PhotoBro_STK[TASK_PhotoBro_STK_SIZE-1],TASK_PhotoBro_Prio);
                                        break;
                                case GUI_ID_BUTTON4: //电子书功能
                                        Out_MainMenu();
                                        OSTaskCreate(Task_TextBro,(void *)0,&TASK_TextBro_STK[TASK_TextBro_STK_SIZE-1],TASK_TextBro_Prio);
                                        break;
                                case GUI_ID_BUTTON2:  //设置系统时间
                                        Out_MainMenu();
                                        OSTaskCreate(Task_Time,(void *)0,&TASK_Time_STK[TASK_Time_STK_SIZE-1],TASK_Time_Prio);
                                        break;
                                case GUI_ID_BUTTON35: //点击向上按钮
                                        WM_Move(MainMenu_pHead,0,-70);
                                        break;
                                case GUI_ID_BUTTON36: //点击向下按钮
                                        WM_Move(MainMenu_pHead,0,70);
                                        break;
                                default:
                                        TouchCmd = 1;
                                        break;               
                        }                        
                }
                WM_MoveCtrl();
            //    GUI_Exec();//重绘
                OSTimeDlyHMSM(0,0,0,20);
        }     
}

Task_Calculator任务的代码:
u8           calflag;

static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] =
{
    { FRAMEWIN_CreateIndirect,  "Calculator",        0,                       0,  0,  320,240,FRAMEWIN_CF_MOVEABLE,0},
    { EDIT_CreateIndirect,       NULL,               GUI_ID_EDIT0,            11, 6,  294,21, 0,0},
    { TEXT_CreateIndirect,      "=",                 GUI_ID_TEXT8,            160,31, 21, 23, 0,0},
    { EDIT_CreateIndirect,       NULL,               GUI_ID_EDIT1,            187,33, 118,21, 0,0},
    { BUTTON_CreateIndirect,    "0",                 GUI_ID_BUTTONC32,          11, 187,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "1",                 GUI_ID_BUTTONC33,          11, 146,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "4",                 GUI_ID_BUTTONC14,          11, 105,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "7",                 GUI_ID_BUTTONC15,          11, 64, 40, 35, 0,0},
    { BUTTON_CreateIndirect,    "8",                 GUI_ID_BUTTONC16,          78, 64, 40, 35, 0,0},
    { BUTTON_CreateIndirect,    "5",                 GUI_ID_BUTTONC17,          78, 105,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "2",                 GUI_ID_BUTTONC18,          78, 146,40, 35, 0,0},
    { BUTTON_CreateIndirect,    ".",                 GUI_ID_BUTTONC19,          78, 187,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "9",                 GUI_ID_BUTTONC20,          141,64, 40, 35, 0,0},
    { BUTTON_CreateIndirect,    "6",                 GUI_ID_BUTTONC21,          141,105,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "3",                 GUI_ID_BUTTONC22,          141,146,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "=",                 GUI_ID_BUTTONC23,          141,187,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "+",                 GUI_ID_BUTTONC24,          204,64, 40, 35, 0,0},
    { BUTTON_CreateIndirect,    "-",                 GUI_ID_BUTTONC25,          204,105,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "*",                 GUI_ID_BUTTONC26,          204,146,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "/",                 GUI_ID_BUTTONC27,          204,187,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "(",                 GUI_ID_BUTTONC28,          267,64, 40, 35, 0,0},
    { BUTTON_CreateIndirect,    ")",                 GUI_ID_BUTTONC29,          267,105,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "D",                 GUI_ID_BUTTONC30,          267,146,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "C",                 GUI_ID_BUTTONC31,          267,187,40, 35, 0,0},
    { BUTTON_CreateIndirect,    "Q",              GUI_ID_BUTTONC34,             11,30,40, 20, 0,0}
};

/*****************************************************************
**      FunctionName:void PaintDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_PAINT
*****************************************************************/

static void PaintDialog(WM_MESSAGE * pMsg)
{
        WM_HWIN hWin = pMsg->hWin;

}

/*****************************************************************
**      FunctionName:void InitDialog(WM_MESSAGE * pMsg)
**      Function: to initialize the Dialog items
**                                                      
**      call this function in _cbCallback --> WM_INIT_DIALOG
*****************************************************************/
static void InitDialog(WM_MESSAGE * pMsg)
{
        WM_HWIN hWin = pMsg->hWin;

        FRAMEWIN_SetTitleHeight(hWin,15);

        TEXT_SetFont(WM_GetDialogItem(hWin,GUI_ID_TEXT0),&GUI_Font24B_1);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC14),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC15),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC16),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC17),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC18),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC19),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC20),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC21),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC22),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC23),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC24),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC25),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC26),&GUI_Font24_1);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC27),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC28),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC29),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC30),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC31),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC32),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC33),&GUI_Font24_ASCII);

        BUTTON_SetFont(WM_GetDialogItem(hWin,GUI_ID_BUTTONC34),&GUI_Font24_ASCII);
}




/*********************************************************************
*
*       Dialog callback routine
*/
static void _cbCallback1(WM_MESSAGE * pMsg)
{
        int NCode, Id;
        u8 key;
        EDIT_Handle  edit0,edit1;
        WM_HWIN hWin = pMsg->hWin;
        edit0=WM_GetDialogItem(hWin,GUI_ID_TEXT0);
        edit1=WM_GetDialogItem(hWin,GUI_ID_TEXT1);
        switch (pMsg->MsgId)
        {
                case WM_PAINT:
                        PaintDialog(pMsg);
                        break;
                case WM_INIT_DIALOG:
                        InitDialog(pMsg);
                        break;
                case WM_KEY:
                        switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
                        {
                                case GUI_KEY_ESCAPE:
                                        GUI_EndDialog(hWin, 1);
                                        break;
                                case GUI_KEY_ENTER:
                                        GUI_EndDialog(hWin, 0);
                                        break;
                        }
                        break;
                case WM_NOTIFY_PARENT:
                        Id = WM_GetId(pMsg->hWinSrc);
                        NCode = pMsg->Data.v;        
                        switch (Id)
                        {
                                case GUI_ID_BUTTONC34:     //退出按钮
                                                              if(NCode==WM_NOTIFICATION_RELEASED)
                                        {
                                                                       GUI_EndDialog(hWin, 1);
                                                calflag=1;    //退出
                                        }
                                                                break;                                                                                
                        }                    
                        break;
                default:
                        WM_DefaultProc(pMsg);
        }
}


void  Task_Calculator(void*p_arg)
{
        MenuDisnable=1;
        GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbCallback1, 0, 0, 0);            

        while(1)
        {
                if(calflag==1)
                {
                         calflag=0;
                        MenuDisnable=0; //主菜单回复滑动操作
                        Go_MainMenu(); //进入主菜单
                        OSTaskDel(OS_PRIO_SELF);    //删除自己                                       
                }               
                OSTimeDlyHMSM(0,0,0,20);
        }
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106934
QQ
发表于 2013-7-19 12:21:00 | 显示全部楼层
没看出什么问题来,你打印一下每个任务堆栈的使用情况看看,
回复

使用道具 举报

6

主题

9

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-7-19 14:51:43 | 显示全部楼层
请教哪个函数可以获得堆栈的使用情况? 我用的MDK
回复

使用道具 举报

6

主题

9

回帖

6

积分

新手上路

积分
6
 楼主| 发表于 2013-7-19 14:52:41 | 显示全部楼层

回 eric2013 的帖子

eric2013:没看出什么问题来,你打印一下每个任务堆栈的使用情况看看, (2013-07-19 12:21) 
请教哪个函数可以获得堆栈的使用情况? 我用的MDK
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 18:05 , Processed in 0.171294 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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