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

📄 test.c

📁 簡單的3個task的EDF排程,可更替task的deadline
💻 C
字号:
#include "includes.h"

#define TASK_STK_SIZE 512 /* Size of each task's stacks (# of WORDs) */
#define TASK_0_PRIO 1
#define TASK_1_PRIO 3
#define TASK_2_PRIO 4
#define TASK_3_PRIO 2

OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK Task0Stk[TASK_STK_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];

void TaskStart(void *pdata);
void Task0(void *pdata);
void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);

void main(void)
{
    PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */
    OSInit(); /* Initialize uC/OS-II */
    PC_DOSSaveReturn(); /* Save environment to return to DOS */
    PC_VectSet(uCOS,OSCtxSw); /* Install uC/OS-II's context switch vector */
    OSTaskCreate(TaskStart,(void *)0,(void *)&TaskStartStk[TASK_STK_SIZE - 1],0);
    OSStart(); /* Start multitasking */
}

void TaskStart(void *pdata)	
{
    INT16S key;
    char Id0 = '1';
    char Id1 = '2';
    char Id2 = '3';
    char Id3 = '4';

    pdata = pdata; /* Prevent compiler warning */
    PC_DispStr(21,0,"uC/OS-II, The Real-Time Kernel",DISP_FGND_WHITE);
    PC_DispStr(26,1,"GI1-34 Shang-Yi Yang",DISP_FGND_WHITE);
    PC_DispStr(30,2,"Homework #3",DISP_FGND_WHITE);
    PC_DispStr(0,4,"  Task Name       Exec.Time(s)   Start.Time(s)        End.Time(s)",DISP_FGND_WHITE);
    PC_DispStr(0,5,"---------------  --------------  ----------------     ------------",DISP_FGND_WHITE);
    PC_DispStr(0,6,"     Task 1",DISP_FGND_WHITE);
    PC_DispStr(0,7,"     Task 2",DISP_FGND_WHITE);
    PC_DispStr(0,8,"     Task 3",DISP_FGND_WHITE);
    PC_DispStr(28,19,"<-PRESS ESC TO QUIT->",DISP_FGND_WHITE);

    OS_ENTER_CRITICAL();
    PC_VectSet(0x08,OSTickISR); /* Install uC/OS-II's clock tick ISR */
    PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
    OS_EXIT_CRITICAL();

    OSStatInit(); /* Initialize uC/OS-II's statistics */

    OSTaskCreate(Task0,(void *)&Id0,(void *)&Task0Stk[TASK_STK_SIZE - 1],TASK_0_PRIO);
    OSTaskCreate(Task1,(void *)&Id1,(void *)&Task1Stk[TASK_STK_SIZE - 1],TASK_1_PRIO);
    OSTaskCreate(Task2,(void *)&Id2,(void *)&Task2Stk[TASK_STK_SIZE - 1],TASK_2_PRIO);
    OSTaskCreate(Task3,(void *)&Id3,(void *)&Task3Stk[TASK_STK_SIZE - 1],TASK_3_PRIO);
    
    for(;;)
    {

        OSCtxSwCtr = 0;

        if(PC_GetKey(&key) == TRUE) /* See if key has been pressed */
        {
            if(key == 0x1B) /* Yes, see if it's the ESCAPE key */
            {
               PC_DOSReturn(); /* Return to DOS */	
			}
		}
        OSTimeDlyHMSM(0,0,19,0); /* Wait one second */
	}
}

void Task1(void *pdata)
{
    char s1[80],s2[80];
    int l1,l2,l3;
    
    pdata = pdata;
    for(;;)
	{
		PC_GetDateTime(s1); /* Get and display date and time */
		PC_DispStr(32,6,s1,DISP_FGND_WHITE + DISP_BGND_RED);
		
		PC_DispChar(22,6,'1',DISP_FGND_WHITE + DISP_BGND_RED);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,6,'2',DISP_FGND_WHITE + DISP_BGND_RED);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,6,'3',DISP_FGND_WHITE + DISP_BGND_RED);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,6,'4',DISP_FGND_WHITE + DISP_BGND_RED);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		
		PC_GetDateTime(s2); /* Get and display date and time */
		PC_DispStr(55, 6, s2,  DISP_FGND_WHITE + DISP_BGND_RED);
		
		OSTaskSuspend(3);
	}
}

void Task2(void *pdata)
{
    char s1[80],s2[80];
    int l1,l2,l3;
    
    pdata = pdata;
	for(;;)
	{
		PC_GetDateTime(s1); /* Get and display date and time */
		PC_DispStr(32,7,s1,DISP_FGND_WHITE + DISP_BGND_BLUE);
		
		PC_DispChar(22,7,'1',DISP_FGND_WHITE + DISP_BGND_BLUE);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,7,'2',DISP_FGND_WHITE + DISP_BGND_BLUE);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,7,'3',DISP_FGND_WHITE + DISP_BGND_BLUE);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		PC_GetDateTime(s2); /* Get and display date and time */
		PC_DispStr(55,7,s2,DISP_FGND_WHITE + DISP_BGND_BLUE);
		
		OSTaskSuspend(4);
	}
}
void Task3(void *pdata)
 {
    char s1[80],s2[80];
    int l1,l2,l3;
    
    pdata = pdata;
	for(;;)
	{
        PC_GetDateTime(s1); /* Get and display date and time */
		PC_DispStr(32,8,s1,DISP_FGND_WHITE + DISP_BGND_GREEN);
		PC_DispChar(22,8,'1',DISP_FGND_WHITE + DISP_BGND_GREEN);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		OSTimeDly(1);
		
		PC_DispChar(22,8,'2',DISP_FGND_WHITE + DISP_BGND_GREEN);
		for(l3=0;l3<=999;l3++)
			for(l2=0;l2<=699;l2++)
				for(l1=0;l1<=900;l1++)
					;
		PC_GetDateTime(s2); /* Get and display date and time */
		PC_DispStr(55,8,s2,DISP_FGND_WHITE + DISP_BGND_GREEN);
		
		OSTaskSuspend(2);
	}
}
void Task0(void *pdata)
{
    pdata = pdata;
	for (;;)
	{
        OSTaskSuspend(3);
		OSTaskSuspend(4);
		OSTimeDlyHMSM(0,0,2,0);

		OSTaskResume(3);
		OSTimeDlyHMSM(0,0,4,0);

		OSTaskResume(2); 
		OSTimeDlyHMSM(0,0,2,0);

		OSTaskResume(4);
		OSTimeDlyHMSM(0,0,2,0);

        OSTaskSuspend(4);
		OSTaskResume(2); 
		OSTimeDlyHMSM(0,0,2,0);

		OSTaskResume(4);
		OSTimeDlyHMSM(0,0,1,0);

		OSTaskResume(3); 
		OSTimeDlyHMSM(0,0,2,0);

		OSTaskSuspend(3);
		OSTaskResume(2);
		OSTimeDlyHMSM(0,0,2,0);

        OSTaskResume(3); 
		OSTimeDlyHMSM(0,0,2,0);

    	OSTimeDlyHMSM(0,0,1,0);

		OSTaskResume(2);
		OSTaskResume(3);
		OSTaskResume(4);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -