|
日前,我将STemWin移植到了ucosiii上,液晶屏是800x480分辨率,处理器是stm32f429,想硬件实际测试一下多任务的运行情况,发现根本就跑不了多任务,单任务运行的到是都很顺畅,没有出现问题。GUI_OS开关和 GUI_MAXTASK 都进行了配置后,多任务运行出现问题,我只开了两个任务进行stemwin的调用,一个是简单的打印显示信息,另一个是画圆形及一个随机数值,两个任务同时运行的话,除了预定的信息显示外,总是莫名其妙的在液晶屏上其他位置打印一些信息。位置没有固定住。现把两个任务贴出来供大家讨论:
static void App_TaskGUI2 (void *p_arg)
{
OS_ERR err;
int x=200;
OSSemPend(&DisplaySem,
0,
OS_OPT_PEND_BLOCKING,
0,
&err);
while(err!=OS_ERR_NONE);
GUI_SetBkColor(GUI_WHITE);
GUI_SetFont(&GUI_Font8x16);
GUI_ClearRect(650,130,780,180);
OSSemPost(&DisplaySem,
OS_OPT_POST_1,
&err);
while(err!=OS_ERR_NONE);
while(DEF_TRUE){
OSSemPend(&DisplaySem,
0,
OS_OPT_PEND_BLOCKING,
0,
&err);
while(err!=OS_ERR_NONE);
GUI_SetColor(x);
GUI_FillCircle(700, 84, 40);
GUI_DispDecAt(x,700,200,8);
x+=255;
if(x>=16777216){
x=0;
}
OSSemPost(&DisplaySem,
OS_OPT_POST_1,
&err);
while(err!=OS_ERR_NONE);
OSTimeDlyHMSM(0u, 0u, 0, 20u,
OS_OPT_TIME_HMSM_STRICT,
&err);
}
}
static void App_TaskGUI4 (void *p_arg)
{
int y=0;
LCD_COLOR BackColor=GUI_WHITE,FrontColor=GUI_BLACK;
OS_ERR err;
CPU_STK_SIZE free,used;
(void)p_arg;
OSSemPend(&DisplaySem,
0,
OS_OPT_PEND_BLOCKING,
0,
&err);
while(err!=OS_ERR_NONE);
GUI_SetFont(&GUI_Font6x8);
GUI_SetBkColor(BackColor);
GUI_ClearRect(400,230,799,479);
GUI_SetTextMode(GUI_TM_NORMAL);
OSSemPost(&DisplaySem,
OS_OPT_POST_1,
&err);
while(err!=OS_ERR_NONE);
while(DEF_TRUE){
OSSemPend(&DisplaySem,
0,
OS_OPT_PEND_BLOCKING,
0,
&err);
while(err!=OS_ERR_NONE);
BackColor=GUI_WHITE;
FrontColor=GUI_BLACK;
GUI_SetColor(FrontColor);
GUI_SetTextMode(GUI_TM_NORMAL);
OSTaskStkChk(&AppTaskStartTCB,&free,&used,&err);
GUI_DispStringAt("AppTaskStart used/free:",400,230);
GUI_DispDecAt(used,660,230,4);
GUI_DispDecAt(free,710,230,4);
OSTaskStkChk(&App_GUITask2TCB,&free,&used,&err);
GUI_DispStringAt("App_GUITask2 used/free:",400,270);
GUI_DispDecAt(used,660,270,4);
GUI_DispDecAt(free,710,270,4);
OSTaskStkChk(&App_GUITask3TCB,&free,&used,&err);
GUI_DispStringAt("App_GUITask3 used/free:",400,280);
GUI_DispDecAt(used,660,280,4);
GUI_DispDecAt(free,710,280,4);
OSTaskStkChk(&App_GUITask4TCB,&free,&used,&err);
GUI_DispStringAt("App_GUITask4 used/free:",400,290);
GUI_DispDecAt(used,660,290,4);
GUI_DispDecAt(free,710,290,4);
GUI_DispStringAt("os_time_get return:",400,300);
GUI_DispDecAt(OSTimeGet(&err),660,300,8);
GUI_DispStringAt("os_StartTask CPUUsage and CtxSwCtr is:",400,320);
GUI_DispDecAt(AppTaskStartTCB.CPUUsage,660,320,8);
GUI_DispDecAt(AppTaskStartTCB.CtxSwCtr,730,320,8);
GUI_DispStringAt("os_task2 CPUUsage and CtxSwCtr is:",400,350);
GUI_DispDecAt(App_GUITask2TCB.CPUUsage,660,350,8);
GUI_DispDecAt(App_GUITask2TCB.CtxSwCtr,730,350,8);
GUI_DispStringAt("os_task4 CPUUsage and CtxSwCtr is:",400,390);
GUI_DispDecAt(App_GUITask4TCB.CPUUsage,660,390,8);
GUI_DispDecAt(App_GUITask4TCB.CtxSwCtr,730,390,8);
__DSB();
OSSemPost(&DisplaySem,
OS_OPT_POST_1,
&err);
while(err!=OS_ERR_NONE);
OSTimeDlyHMSM(0u, 0u, 0, 30u,
OS_OPT_TIME_HMSM_STRICT,
&err);
}
} |
|