高中生
最后登录1970-1-1
在线时间 小时
注册时间2013-7-8
|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2013-7-8 20:03:13
|
显示全部楼层
Alice2013 发表于 2013-7-8 17:43 ![](static/image/common/back.gif)
1. 把你的任务优先级和任务的代码贴一下。
2. GUI_ExecDialogBox是阻塞对话框,不删除是不会执行后面的程序 ...
1.任务优先级如下:
#define STARTUP_TASK_PRIO 6
#define TASK_LED2_PRIO 5
#define TASK_LED3_PRIO 4
任务代码如下:
void Task_LED(void *p_arg)
{
(void)p_arg;
OSTaskCreate(Task_LED2,(void *)0,
&task_led2_stk[TASK_LED2_STK_SIZE-1], TASK_LED2_PRIO);
OSTaskCreate(Task_LED3,(void *)0,
&task_led3_stk[TASK_LED3_STK_SIZE-1], TASK_LED3_PRIO);
MainTaskbutton1(); //程序在这里面循环
while (1)
{
LED1( ON );
OSTimeDlyHMSM(0, 0,0,100);
LED1( OFF);
OSTimeDlyHMSM(0, 0,0,100);
WM_Exec();
}
}
void Task_LED2(void *p_arg)
{
(void)p_arg;
while(1)
{
LED2(ON);
OSTimeDlyHMSM(0,0,0,30);
LED2(OFF);
GUI_TOUCH_Exec();//获取坐标
OSTimeDlyHMSM(0,0,0,30);
}
}
void Task_LED3(void *p_arg)
{
(void)p_arg;
while(1)
{
LED3(ON);
OSTimeDlyHMSM(0,0,0,800);
LED3(OFF);
OSTimeDlyHMSM(0,0,0,800);
}
}
其中MainTaskbutton1()是由uCGUIBuilder生成的函数,其中关键内容如下:
void MainTaskbutton1(void)
{
// GUI_Init();
// GUI_CURSOR_Show();
WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */
WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
//实际上是程序在这里面的WM_Exec()和WM_Exec1()两个函数间不停地循环
}
2.uCGUIBuilder建立的都是这种GUI_ExecDialogBox对话框,这种阻塞对话框应该不会干扰任务的切换啊,任务怎么会
停止呢?
结果是:LED1不亮,LED2和LED3一直亮着,显示屏显示出了正确的窗口和按钮,但是由于任务不能切换,导致GUI_TOUCH_Exec()这个函数执行不了,这才是最悲剧的! |
|