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

📄 edf.c

📁 请各位加入,保证此EDF一定可用.因为我就是用它交成绩的
💻 C
📖 第 1 页 / 共 2 页
字号:
/***********************************************************************************************************                                                uC/OS-II*                                          The Real-Time Kernel**                          (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL*                                           All Rights Reserved**                                               EXAMPLE #3**********************************************************************************************************/#include "includes.h"/***********************************************************************************************************                                              CONSTANTS**********************************************************************************************************/#define          TASK_STK_SIZE     1024                /* Size of each task's stacks (# of WORDs)       */#define          TASK_START_ID       0                /* Application tasks                             */#define          TASK_EDF_ID         1#define          TASK_1_ID           2#define          TASK_2_ID           3#define          TASK_3_ID           4#define          TASK_START_PRIO    10                /* Application tasks priorities                  */#define          TASK_EDF_PRIO      11#define          TASK_1_PRIO        20#define          TASK_2_PRIO        21#define          TASK_3_PRIO        22#define          N_TASK              5#define          MSG_QUEUE_SIZE     2                /* Size of message queue used in example         *//***********************************************************************************************************                                             DATA TYPES**********************************************************************************************************/typedef struct {    char    TaskName[30];    INT16U  TaskCtr;    INT16U  TaskExecTime;    INT32U  TaskTotExecTime;} TASK_USER_DATA;/***********************************************************************************************************                                              VARIABLES**********************************************************************************************************/OS_STK          TaskStartStk[TASK_STK_SIZE];          /* Startup    task stack                         */OS_STK          TaskEdfStk[TASK_STK_SIZE];            /* Clock      task stack                         */OS_STK          Task1Stk[TASK_STK_SIZE];              /* Task #1    task stack                         */OS_STK          Task2Stk[TASK_STK_SIZE];              /* Task #2    task stack                         */OS_STK          Task3Stk[TASK_STK_SIZE];              /* Task #3    task stack                         */TASK_USER_DATA  TaskUserData[N_TASK];OS_EVENT        *CommMbox;INT8U           CommRxBuf[1];INT8U           lock[3],check;INT8U           display1,display2,display3,display4;/***********************************************************************************************************                                         FUNCTION PROTOTYPES**********************************************************************************************************/        void  TaskStart(void *data);                  /* Function prototypes of tasks                  */static  void  TaskStartCreateTasks(void);static  void  TaskStartDispInit(void);static  void  TaskStartDisp(void);        void  TaskEdf(void *data);        void  Task1(void *data);        void  Task2(void *data);        void  Task3(void *data);        void  DispTaskStat(INT8U id);/*$PAGE*//***********************************************************************************************************                                                  MAIN**********************************************************************************************************/void  main (void){    PC_DispClrScr(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 */    PC_ElapsedInit();                                      /* Initialized elapsed time measurement     */    strcpy(TaskUserData[TASK_START_ID].TaskName, "StartTask");    OSTaskCreateExt(TaskStart,                    (void *)0,                    &TaskStartStk[TASK_STK_SIZE - 1],                    TASK_START_PRIO,                    TASK_START_ID,                    &TaskStartStk[0],                    TASK_STK_SIZE,                    &TaskUserData[TASK_START_ID],                    0);    OSStart();                                             /* Start multitasking                       */}/*$PAGE*//***********************************************************************************************************                                               STARTUP TASK**********************************************************************************************************/void  TaskStart (void *pdata){#if OS_CRITICAL_METHOD == 3                                /* Allocate storage for CPU status register */    OS_CPU_SR  cpu_sr;#endif    INT16S     key;    INT8U err;      pdata = pdata;                                         /* Prevent compiler warning                 */    TaskStartDispInit();                                   /* Setup the display                        */    OS_ENTER_CRITICAL();                                   /* Install uC/OS-II's clock tick ISR        */    PC_VectSet(0x08, OSTickISR);    PC_SetTickRate(OS_TICKS_PER_SEC);                      /* Reprogram tick rate                      */    OS_EXIT_CRITICAL();    OSStatInit();                                          /* Initialize uC/OS-II's statistics         */    CommMbox=OSMboxCreate((void *) 0);                     /* Create a mail box                        */    TaskStartCreateTasks();	display1=0;    display2=0;	display3=0;	display4=0;	    err=OSTaskSuspend(TASK_1_PRIO);    err=OSTaskSuspend(TASK_2_PRIO);    err=OSTaskSuspend(TASK_3_PRIO);  	err=OSTaskChangePrio(62,15);	err=OSTaskChangePrio(OS_PRIO_SELF,60);    	for (;;) {        OSTaskDel(OS_PRIO_SELF);		OSTimeDly(OS_TICKS_PER_SEC);                       /* Wait one second                          */    }}/*$PAGE*//***********************************************************************************************************                                      CREATE APPLICATION TASKS**********************************************************************************************************/void  TaskStartCreateTasks (void){    strcpy(TaskUserData[TASK_EDF_ID].TaskName, "Edf Task");    OSTaskCreateExt(TaskEdf,                    (void *)0,                    &TaskEdfStk[TASK_STK_SIZE - 1],                    TASK_EDF_PRIO,                    TASK_EDF_ID,                    &TaskEdfStk[0],                    TASK_STK_SIZE,                    &TaskUserData[TASK_EDF_ID],                    0); 	strcpy(TaskUserData[TASK_1_ID].TaskName, "Task #1");    OSTaskCreateExt(Task1,                    (void *)0,                    &Task1Stk[TASK_STK_SIZE - 1],                    TASK_1_PRIO,                    TASK_1_ID,                    &Task1Stk[0],                    TASK_STK_SIZE,                    &TaskUserData[TASK_1_ID],                    0);    strcpy(TaskUserData[TASK_2_ID].TaskName, "Task #2");    OSTaskCreateExt(Task2,                    (void *)0,                    &Task2Stk[TASK_STK_SIZE - 1],                    TASK_2_PRIO,                    TASK_2_ID,                    &Task2Stk[0],                    TASK_STK_SIZE,                    &TaskUserData[TASK_2_ID],                    0);    strcpy(TaskUserData[TASK_3_ID].TaskName, "Task #3");    OSTaskCreateExt(Task3,                    (void *)0,                    &Task3Stk[TASK_STK_SIZE - 1],                    TASK_3_PRIO,                    TASK_3_ID,                    &Task3Stk[0],                    TASK_STK_SIZE,                    &TaskUserData[TASK_3_ID],                    0); }/*$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, "                                Jean J. Labrosse                                ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);    PC_DispStr( 0,  2, "                                                                                ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);    PC_DispStr( 0,  3, "                                    EXAMPLE #3                                  ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);    PC_DispStr( 0,  4, "                                                                                ", DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);    PC_DispStr( 0,  5, "                                                                                ", 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, "Task Name         Counter  Exec.Time(uS)   Tot.Exec.Time(uS)  %Tot.             ", 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, "                                                                                ", 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*//***********************************************************************************************************                                           UPDATE THE DISPLAY**********************************************************************************************************/static  void  TaskStartDisp (void){    char   s[80];    sprintf(s, "%5d", OSTaskCtr);                                  /* Display #tasks running               */    PC_DispStr(18, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);#if OS_TASK_STAT_EN > 0    sprintf(s, "%3d", OSCPUUsage);                                 /* Display CPU usage in %               */    PC_DispStr(36, 22, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);#endif    sprintf(s, "%5d", OSCtxSwCtr);                                 /* Display #context switches per second */    PC_DispStr(18, 23, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);    sprintf(s, "V%1d.%02d", OSVersion() / 100, OSVersion() % 100); /* Display uC/OS-II's version number    */    PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);    switch (_8087) {                                               /* Display whether FPU present          */        case 0:             PC_DispStr(71, 22, " NO  FPU ", DISP_FGND_YELLOW + DISP_BGND_BLUE);             break;        case 1:             PC_DispStr(71, 22, " 8087 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);             break;        case 2:             PC_DispStr(71, 22, "80287 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);             break;        case 3:             PC_DispStr(71, 22, "80387 FPU", DISP_FGND_YELLOW + DISP_BGND_BLUE);             break;    }}/*$PAGE*//***********************************************************************************************************                                               TASK**********************************************************************************************************/void  Task1 (void *pdata){    char    s[10];	char  *msg;	INT8U  err;    INT16S     key;    pdata = pdata;    for (;;) {	            lock[0]=0;                while(lock[0]==0){	            }				    			if(display1<80){	             sprintf(s, "%1d>1 ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); 				 display1=display1+4;		         }		        else{		         display1=0;	             sprintf(s, "%1d>1 ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                 display1=display1+4;				 		        } 								    }}void  Task2 (void *pdata){    char    s[10];	char  *msg;	INT8U  err;    INT16S     key;    pdata = pdata;    for (;;) {		        lock[1]=0;                while(lock[1]==0){	            }              			if(display1<80){	             sprintf(s, "%1d>2  ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); 				 display1=display1+4;		         }		        else{		         display1=0;	             sprintf(s, "%1d>2  ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                 display1=display1+4;				 		        }         }}void  Task3 (void *pdata){    char    s[10];	char  *msg;	INT8U  err;    INT16S     key;    pdata = pdata;    for (;;) {    		    lock[2]=0;                while(lock[2]==0){	            } 				if(display1<80){	             sprintf(s, "%1d>3 ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); 				 display1=display1+4;		         }		        else{		         display1=0;	             sprintf(s, "%1d>3  ",check);                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);	                 display1=display1+4;				 		        }           }

⌨️ 快捷键说明

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