Beispiel #1
0
void OSTaskSchedule(void)
{
		OSTCBCur = OSTCBNext;
		OSCtxSw();
		OSTaskNext++;
		while(OSTCBTbl[OSTaskNext].OSTCBStkPtr == (OS_STK*)0) { 
			OSTaskNext++;
			if(OSTaskNext >= OS_MAX_TASKS) {
				OSTaskNext = 0;
			}
		}
		OSTCBNext = &OSTCBTbl[OSTaskNext];
//	TimeMS++;
//	OS_TCB TcbTmp;
//	uint32_t i;
//	uint8_t HighestPriority = LOWEST_PRIORITY;
	
	// OSTCBCur = OSTCBNext;
	// TcbTmp = *OSTCBCur;
	
	//OSTaskNext++;
	//for(i = 0; i < OS_MAX_TASKS; i++) {
		//if(OSTCBTbl[i].TaskState == TASK_STATE_PAUSING) {
			//HighestPriority = OSTCBTbl[i].Priority < HighestPriority ? OSTCBTbl[i].Priority : HighestPriority; 
		//}
//	}
	
//	for(i = OSTaskNext; i < OS_MAX_TASKS; i++) {
	//	if(OSTCBTbl[i].IsDaemon) {
		//	if(OSTCBTbl[i].TaskState == TASK_STATE_PAUSING) {
			//}
			
	//	} else if(OSTCBTbl[i].Priority == HighestPriority && HighestPriority != LOWEST_PRIORITY) {
		//	break;
		//}
		
//		if(OSTaskNext > 1 && i == OS_MAX_TASKS - 1) {
	//		i = 0;
		//}
		
		// No Task/Daemon left, just to run TaskIdle
//		if(i == OSTaskNext - 1) {
	//		i = 0;
		//	break;
		//}
//	}
//	OSTaskNext = i;
	
//	OSTCBNext = &OSTCBTbl[OSTaskNext];
	
//	OSCtxSw();
}
Beispiel #2
0
DWORD WINAPI OSCtxSwW32( LPVOID lpParameter )
{
    OS_INIT_CRITICAL();

    while(!OSTerminateCtxSwW32)
    {
        if( WAIT_OBJECT_0 == WaitForSingleObject(OSCtxSwW32Event,INFINITE) )
        {
            OS_ENTER_CRITICAL();
            OSCtxSw();
            OS_EXIT_CRITICAL();
        }
    }
    return 0;
}