|
我用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);
}
} |
|