void Task(void) { unsigned idleCount; unsigned numCtxSwitches; printString("Task started.\n"); while (1) { printString("Delaying task...\n"); YKDelayTask(2); YKEnterMutex(); numCtxSwitches = YKCtxSwCount; idleCount = YKIdleCount; YKIdleCount = 0; YKExitMutex(); printString("Task running after "); printUInt(numCtxSwitches); printString(" context switches! YKIdleCount is "); printUInt(idleCount); printString(".\n"); } }
void TaskStat(void) /* a task to track statistics */ { unsigned max, switchCount, idleCount; int tmp; YKDelayTask(1); printString("Welcome to the YAK kernel\r\n"); printString("Determining CPU capacity\r\n"); YKDelayTask(1); YKIdleCount = 0; YKDelayTask(5); max = YKIdleCount / 25; YKIdleCount = 0; YKNewTask(TaskPrime, (void *) &TaskPRMStk[TASK_STACK_SIZE], 32); YKNewTask(TaskWord, (void *) &TaskWStk[TASK_STACK_SIZE], 10); YKNewTask(TaskSpace, (void *) &TaskSStk[TASK_STACK_SIZE], 11); YKNewTask(TaskPunc, (void *) &TaskPStk[TASK_STACK_SIZE], 12); while (1) { YKDelayTask(20); YKEnterMutex(); switchCount = YKCtxSwCount; idleCount = YKIdleCount; YKExitMutex(); printString ("<<<<< Context switches: "); printInt((int)switchCount); printString(", CPU usage: "); tmp = (int) (idleCount/max); printInt(100-tmp); printString("% >>>>>\r\n"); YKEnterMutex(); YKCtxSwCount = 0; YKIdleCount = 0; YKExitMutex(); } }
void STask(void) /* tracks statistics */ { unsigned max, switchCount, idleCount; int tmp; YKDelayTask(1); printString("Welcome to the YAK kernel\r\n"); printString("Determining CPU capacity\r\n"); YKDelayTask(1); YKIdleCount = 0; YKDelayTask(5); max = YKIdleCount / 25; YKIdleCount = 0; YKNewTask(CharTask, (void *) &CharTaskStk[TASK_STACK_SIZE], 2); YKNewTask(AllNumsTask, (void *) &AllNumsTaskStk[TASK_STACK_SIZE], 1); YKNewTask(AllCharsTask, (void *) &AllCharsTaskStk[TASK_STACK_SIZE], 3); while (1) { YKDelayTask(20); YKEnterMutex(); switchCount = YKCtxSwCount; idleCount = YKIdleCount; YKExitMutex(); printString("<<<<< Context switches: "); printInt((int)switchCount); printString(", CPU usage: "); tmp = (int) (idleCount/max); printInt(100-tmp); printString("% >>>>>\r\n"); YKEnterMutex(); YKCtxSwCount = 0; YKIdleCount = 0; YKExitMutex(); } }
/* * tracks statistics */ void StatTask(void) { unsigned max, switchCount, idleCount; int tmp; YKDelayTask(1); printString("Welcome to the YAK kernel\r\n"); printString("Determining CPU capacity\r\n"); YKDelayTask(1); YKIdleCount = 0; YKDelayTask(5); max = YKIdleCount / 25; YKIdleCount = 0; YKNewTask(ArrivalTask, (void *) &ArrivalTaskStk[TASK_STACK_SIZE], 25); YKNewTask(CommunicationTask, (void *) &CommunicationTaskStk[TASK_STACK_SIZE], 20); while (1) { YKDelayTask(20); YKEnterMutex(); switchCount = YKCtxSwCount; idleCount = YKIdleCount; YKExitMutex(); printString("<CS: "); printInt((int)switchCount); printString(", CPU: "); tmp = (int) (idleCount/max); printInt(100-tmp); printString(">\r\n"); YKEnterMutex(); YKCtxSwCount = 0; YKIdleCount = 0; YKExitMutex(); } }
void STask(void) // tracks statistics { unsigned max, switchCount, idleCount; int tmp; YKIdleCount = 0; YKDelayTask(5); max = YKIdleCount / 25; YKIdleCount = 0; //Start Simptris SeedSimptris(SEED); StartSimptris(); while (1) { YKDelayTask(20); YKEnterMutex(); switchCount = YKCtxSwCount; idleCount = YKIdleCount; YKExitMutex(); printString("<CS: "); printInt((int)switchCount); printString(", CPU: "); tmp = (int) (idleCount/max); printInt(100-tmp); printString(">\n\r"); YKEnterMutex(); YKCtxSwCount = 0; YKIdleCount = 0; YKExitMutex(); } }
void TaskPunc(void) { while (1) { YKSemPend(PSemPtr); printChar('"'); YKSemPost(WSemPtr); YKSemPend(PSemPtr); printChar(','); YKSemPost(SSemPtr); YKSemPend(PSemPtr); printString("!\"\r\n"); YKSemPost(PSemPtr); YKDelayTask(6); } }