⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test.c

📁 南昌大学软件学院的uc_os-ii大综合作业:十字路口交通控制系统。一个学习ucos-ii不错的范例。
💻 C
📖 第 1 页 / 共 3 页
字号:
                   &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 + -