📄 test.c
字号:
&Task3Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task4,
(void *)0,
&Task4Stk[TASK_STK_SIZE-1],
TASK_4_PRIO,
TASK_4_ID,
&Task4Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task5,
(void *)0,
&Task5Stk[TASK_STK_SIZE-1],
TASK_5_PRIO,
TASK_5_ID,
&Task5Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
OSTaskCreateExt(Task6,
(void *)0,
&Task6Stk[TASK_STK_SIZE-1],
TASK_6_PRIO,
TASK_6_ID,
&Task6Stk[0],
TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
}
/*$PAGE*/
/*
*********************************************************************************************************
* INITIALIZE THE DISPLAY
*********************************************************************************************************
*/
static void TaskStartDispInit (void)
{
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
PC_DispStr( 0, 0, " uC/OS-II, The Real-Time Kernel ", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK);
PC_DispStr( 0, 1, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 2, " Crossroads Traffic Control System ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 3, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 4, "|-----------------------------------| |-----------------------------------|", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 5, " See in West See in East ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 6, "|-----------------------------------| |-----------------------------------|", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 7, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 8, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 9, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 10, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 11, "|-----------------------------------| |-----------------------------------|", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 12, " See in North See in South ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 13, "|-----------------------------------| |-----------------------------------|", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 14, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 15, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 16, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 17, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 18, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 19, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 20, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 21, " ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 22, "#Tasks : CPU Usage: % ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 23, "#Task switch/sec: ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 0, 24, " <-PRESS 'ESC' TO QUIT-> ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY + DISP_BLINK);
/* 1111111111222222222233333333334444444444555555555566666666667777777777 */
/* 01234567890123456789012345678901234567890123456789012345678901234567890123456789 */
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #1
*
* Description: 第2、8行绿色字符显示事务、第6行橙色字符显示事务。南北向的检测器完成的事务可放在同一个任务中。
*
*
*********************************************************************************************************
*/
void Task1 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
char t[10];
pdata = pdata;
for (;;) {
if(ac_key) /*第一次执行挂起后续任务 */
{
ac_key=FALSE;
OSTaskSuspend(13);
OSTaskSuspend(14);
OSTaskSuspend(15);
OSTaskSuspend(16);
}
PC_DispStr( 2, 7,"Please slow moving -------> East ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY); /*请减速通过路口向东(或者西)行 */
PC_DispStr( 46, 7,"Please slow moving -------> West ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 16,"Car [-->South] must park to wait ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY); /*请南(或者北)行汔车停车等候 */
PC_DispStr( 46, 16,"Car [-->North] must park to wait ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);/*将其他显示信息清空,刷新 */
PC_DispStr( 46, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 9," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 9," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2,14," ", DISP_FGND_BLUE + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46,14," ", DISP_FGND_BLUE + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2,15," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46,15," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,10,0); /*东西正向通行距1分钟差10秒 */
OSTaskResume(16); /*唤醒Task5 */
OSTimeDlyHMSM(0,0,1,0);
sprintf(t, "%5d", id); /* Display #id */
PC_DispStr(2, 18, t, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, id, 0); /*智能控制通行时间变化 */
s="slow move --> East/West will end";
OSMboxPost(Str_Box,s); /*以消息邮箱发送东西向即将结束通行信号*/
OSTimeDlyHMSM(0,0,5,0); /*东西正向通行最后10秒 */
OSTaskResume(14); /*唤醒Task3 */
OSTaskSuspend(OS_PRIO_SELF);
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #2
*
* Description: 第4、6行绿色字符显示事务、第2行橙色字符显示事务。东西向的检测器完成的事务可放在同一个任务中。
*
*
*********************************************************************************************************
*/
void Task2 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
char t[10];
pdata = pdata;
for (;;)
{
PC_DispStr( 2, 9,"Car [--> East] must park to wait ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY); /*请东(或者西)行汔车停车等候 */
PC_DispStr( 46, 9,"Car [--> West] must park to wait ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 14,"Please slow moving ------->North ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY); /*请减速通过路口向南(或者北)行 */
PC_DispStr( 46,14,"Please slow moving ------->South ", DISP_FGND_GREEN+ DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY); /*将其他显示信息清空,刷新 */
PC_DispStr( 46, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2,15," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46,15," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2,16," ", DISP_FGND_BLUE + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46,16," ", DISP_FGND_BLUE + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,10,0); /*南北正向通行距1分钟差10秒 */
OSTaskResume(16); /*唤醒Task5 */
OSTimeDlyHMSM(0,0,1,0);
sprintf(t, "%5d", id); /* Display #id */
PC_DispStr(46, 18, t, DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDlyHMSM(0, 0, id, 0); /*智能控制通行时间变化 */
s="slow move -->South/North will end"; /*以消息邮箱发送南北向即将结束通行信号*/
OSMboxPost(Str_Box,s);
OSTimeDlyHMSM(0,0,5,0); /*南北正向通行最后10秒 */
OSTaskResume(15); /*唤醒Task4 */
OSTaskSuspend(OS_PRIO_SELF);
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #3
*
* Description: 东西方向,用黄色的显示“请减速通过路口左拐”,同时闪烁50秒结束。
*
*
*********************************************************************************************************
*/
void Task3 (void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
pdata = pdata;
for (;;)
{
PC_DispStr( 2, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 9," ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 9," ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);
for(i=1;i<5;i++) /*显示“请减速通过路口左拐”,同时闪烁50秒结束*/
{
// PC_DispStr( 2, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
// PC_DispStr( 46, 7," ", DISP_FGND_RED + DISP_BGND_LIGHT_GRAY);
//PC_DispStr( 2, 9," ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);
// PC_DispStr( 46, 9," ", DISP_FGND_GREEN + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 2, 8,"Go through the street turn Left ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 8,"Go through the street turn Left ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,0,500);
PC_DispStr( 2, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 8," ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
OSTimeDlyHMSM(0,0,0,500);
PC_DispStr( 2, 8,"Go through the street turn Left ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
PC_DispStr( 46, 8,"Go through the street turn Left ", DISP_FGND_YELLOW + DISP_BGND_LIGHT_GRAY);
}
OSTimeDlyHMSM(0,0,1,0);
OSTaskResume(13); /*唤醒Task2 */
OSTaskSuspend(OS_PRIO_SELF);
}
}
/*$PAGE*/
/*
*********************************************************************************************************
* TASK #4
*
* Description:南北方向,用黄色的显示“请减速通过路口左拐”,同时闪烁50秒结束。
*
*
*********************************************************************************************************
*/
void Task4 (void *pdata)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -