📄 test.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 + -