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

📄 edf.c

📁 请各位加入,保证此EDF一定可用.因为我就是用它交成绩的
💻 C
📖 第 1 页 / 共 2 页
字号:
}/***********************************************************************************************************                                               EDF TASK**********************************************************************************************************/void  TaskEdf (void *pdata){    char  s[40];    INT16S     key;    INT8U err,i,j,min,index,winner,prio,sub;		INT8U state[3]={0,0,0};  // 0:none 1:waiting 2:running  	INT8U Di[3]={10,20,5};	INT8U Dii[3]={0,0,0};	INT8U di[3]={0,0,0};	INT8U ei[3]={4,3,2};	INT8U phase[3]={0,0,0};	void *msg;    pdata = pdata;		    for (;;) {                 msg=OSMboxPend(CommMbox,0,&err);		TaskStartDisp();                                   /* Update the display                       */        if (PC_GetKey(&key)) {                             /* See if key has been pressed              */            if (key == 0x1B) {                             /* Yes, see if it's the ESCAPE key          */                PC_DOSReturn();                            /* Yes, return to DOS                       */            }        }        OSCtxSwCtr = 0;                                    /* Clear the context switch counter         */        		if(Dii[1]==0){		display1=0;		}  				for (i=0;i<3;i++){									if(Dii[i]==0){               Dii[i]=Di[i];               di[i]=0;               state[i]=1;			   phase[i]=0;			}			            if(state[i]==1){		    sprintf(s, "(%3d) W di:%3d P:%3d",Di[i], Di[i]-di[i],phase[i]); 		    PC_DispStr(50, 5+i, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);			}            else if(state[i]==2){	        sprintf(s, "(%3d) R di:%3d P:%3d",Di[i], Di[i]-di[i],phase[i]); 		    PC_DispStr(50, 5+i, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);			}			else{		    sprintf(s, "--------------------"); 		    PC_DispStr(50, 5+i, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);			}					}							sub=0;		min=200;		index=0;		winner=0;				for (i=0;i<3;i++){				                if(di[i]>=Di[i]){			sprintf(s, "%3d miss the deadline",i);                                  /* Display ISR running                    */            PC_DispStr(60, 0, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);			}      						if(state[i]==1){			      			   sub=Di[i]-di[i];			   di[i]++;			   if(min >= sub){			      min=sub;				  index=i;				  winner=1;   //waiting			   }			}						else if(state[i]==2){			   			   sub=Di[i]-di[i];			   di[i]++;			   if(min >= sub){			      min=sub;				  index=i;				  winner=2;   //running			   }			}				}		        //sprintf(s, "%3d:%3d:%3d", state[0],state[1],state[2]);   		//PC_DispStr(60, 19, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);				if(display3<80){	     sprintf(s, "%1d%1d%1d ",  state[0],state[1],state[2]);                                  /* Display ISR running                    */         PC_DispStr(display3, 18, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);          display3=display3+4;		}		else{		display3=0;	    sprintf(s, "%1d%1d%1d ",  state[0],state[1],state[2]);                                  /* Display ISR running                    */        PC_DispStr(display3, 18, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);        display3=display3+4;				 		} 								if(winner!=0){						prio=0;						for (i=0;i<3;i++){			     							if(state[i]!=0){			     state[i]=1;				 prio=TASK_1_PRIO+i;				 err=OSTaskSuspend(prio);				}				else{				 prio=TASK_1_PRIO+i;				 err=OSTaskSuspend(prio);								}							}            prio=TASK_1_PRIO+index;						if(winner==1){    //waiting			                   phase[index]++;								if(phase[index]==ei[index]){			    				  state[index]=0;				 // sprintf(s, "PRIO(R):finsh %3d",ei[index]);                              			     //PC_DispStr(60, 18, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); 			    } 				else{                  state[index]=2;				}				lock[index]=1;				check=index+1;				err=OSTaskResume(prio);				//sprintf(s, "PRIO(W):%3d", prio);                          			    //PC_DispStr(60, 17, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                			}			else if(winner==2){     //running			    							phase[index]++;				if(phase[index]==ei[index]){			    				  state[index]=0;				  //sprintf(s, "PRIO(R):finsh %3d",ei[index]);                                  			      //PC_DispStr(60, 18, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);	    		  			    } 								else{ 				  state[index]=2;				 //sprintf(s, "PRIO(R):%3d   ", prio);                                 			     //PC_DispStr(60, 18, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);				}              	 lock[index]=1;                 check=index+1;				                  err=OSTaskResume(prio);			}							if(display2<80){	             sprintf(s, "%1d:%1d ", index+1,phase[index]);                                  /* Display ISR running                    */                 PC_DispStr(display2, 20, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                  display2=display2+4;			         }		        else{		         display2=0;	             sprintf(s, "%1d:%1d ", index+1,phase[index]);                                  /* Display ISR running                    */                 PC_DispStr(display2, 20, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                 display2=display2+4;				 		        } 				 				}		else{										if(display2<80){	             sprintf(s, "--- ");                                  /* Display ISR running                    */                 PC_DispStr(display2, 20, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);  		         }		        else{		         display2=0;	             sprintf(s, "--- ");                                  /* Display ISR running                    */                 PC_DispStr(display2, 20, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);			 		        }                  display2=display2+4;				 				if(display1<80){	             sprintf(s, "--- ");                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); 				 display1=display1+4;		         }		        else{		         display1=0;	             sprintf(s, "--- ");                                  /* Display ISR running                    */                 PC_DispStr(display1, 21, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);                 display1=display1+4;				 		        } 				 				 				 		}				if(display4<80){	     sprintf(s, "%1d%1d%1d ",  state[0],state[1],state[2]);                                  /* Display ISR running                    */         PC_DispStr(display4, 19, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);          display4=display4+4;		}		else{		display4=0;	    sprintf(s, "%1d%1d%1d ",  state[0],state[1],state[2]);                                  /* Display ISR running                    */        PC_DispStr(display4, 19, s, DISP_FGND_YELLOW + DISP_BGND_BLUE);        display4=display4+4;				 		} 						for (i=0;i<3;i++){	           Dii[i]--;		}    }}/*$PAGE*//***********************************************************************************************************                                      DISPLAY TASK RELATED STATISTICS**********************************************************************************************************/void  DispTaskStat (INT8U id){    char  s[80];    sprintf(s, "%-18s %05u      %5u          %10ld",            TaskUserData[id].TaskName,            TaskUserData[id].TaskCtr,            TaskUserData[id].TaskExecTime,            TaskUserData[id].TaskTotExecTime);    PC_DispStr(0, id + 11, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);}/***********************************************************************************************************                                       OS INITIALIZATION HOOK*                                            (BEGINNING)**********************************************************************************************************/void  OSInitHookBegin (void){}/***********************************************************************************************************                                       OS INITIALIZATION HOOK*                                               (END)**********************************************************************************************************/void  OSInitHookEnd (void){}/***********************************************************************************************************                                          TASK CREATION HOOK**********************************************************************************************************/void  OSTaskCreateHook (OS_TCB *ptcb){    ptcb = ptcb;                       /* Prevent compiler warning                                     */}/***********************************************************************************************************                                           TASK DELETION HOOK**********************************************************************************************************/void  OSTaskDelHook (OS_TCB *ptcb){    ptcb = ptcb;                       /* Prevent compiler warning                                     */}/***********************************************************************************************************                                             IDLE TASK HOOK**********************************************************************************************************/void  OSTaskIdleHook (void){}/***********************************************************************************************************                                           STATISTIC TASK HOOK**********************************************************************************************************/void  OSTaskStatHook (void){    char    s[80];    INT8U   i;    INT32U  total;    INT8U   pct;    total = 0L;                                          /* Totalize TOT. EXEC. TIME for each task */    for (i = 0; i < N_TASK; i++) {        total += TaskUserData[i].TaskTotExecTime;        DispTaskStat(i);                                 /* Display task data                      */    }    if (total > 0) {        for (i = 0; i < N_TASK; i++) {                        /* Derive percentage of each task         */            pct = 100 * TaskUserData[i].TaskTotExecTime / total;            sprintf(s, "%3d %%", pct);            PC_DispStr(62, i + 11, s, DISP_FGND_BLACK + DISP_BGND_LIGHT_GRAY);        }    }    if (total > 1000000000L) {                           /* Reset total time counters at 1 billion */        for (i = 0; i < N_TASK; i++) {            TaskUserData[i].TaskTotExecTime = 0L;        }    }}/***********************************************************************************************************                                           TASK SWITCH HOOK**********************************************************************************************************/void  OSTaskSwHook (void){    INT16U           time;    TASK_USER_DATA  *puser;    time  = PC_ElapsedStop();                    /* This task is done                                  */    PC_ElapsedStart();                           /* Start for next task                                */    puser = OSTCBCur->OSTCBExtPtr;               /* Point to used data                                 */    if (puser != (TASK_USER_DATA *)0) {        puser->TaskCtr++;                        /* Increment task counter                             */        puser->TaskExecTime     = time;          /* Update the task's execution time                   */        puser->TaskTotExecTime += time;          /* Update the task's total execution time             */    }}/***********************************************************************************************************                                           OSTCBInit() HOOK**********************************************************************************************************/void  OSTCBInitHook (OS_TCB *ptcb){    ptcb = ptcb;                                           /* Prevent Compiler warning                 */}/***********************************************************************************************************                                               TICK HOOK**********************************************************************************************************/void  OSTimeTickHook (void){    char    s[10];	INT8U  err;		err=OSMboxPost(CommMbox,(void *) &CommRxBuf[0]);}

⌨️ 快捷键说明

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