00001 /******************** 00002 *Project: 80X86 32BIT MULTI TASKING OPERATING SYSTEM 00003 *Description: Core of multi-tasking kernel 00004 00005 *Author: Book Chen 00006 *Date: 2010.01.01 00007 ********************* 00008 */ 00009 #include "includes.h" 00010 00011 const U8 OsUnkown[]="UNKNOW"; 00012 00013 U32 OsTaskSwitch; 00014 U32 OsTaskCurrent; 00015 U32 OsTaskNext; 00016 U32 OsIntNesting; 00017 U32 OsRunning; 00018 U8 OsHasIntNesting; 00019 00020 void OsInit(void){ 00021 OsCoreInit(); 00022 OsTaskInit(); 00023 OsSchedulerInit(); 00024 OsEventInit(); 00025 OsResourceInit(); 00026 OsTimeInit(); 00027 } 00028 00029 void OsCoreInit(void){ 00030 OsIntNesting=0; 00031 OsTaskSwitch=0; 00032 OsRunning=0; 00033 OsHasIntNesting=0; 00034 } 00035 00036 void OsStart(void){ 00037 if(OsRunning==false) 00038 if(OsSchedulerFindRootTask()==true) 00039 OsRootTaskStart(); 00040 while(1); 00041 } 00042 00043 void OsYield(void){ 00044 OsTaskSwitchOut(); 00045 } 00046 00047 void OsFinish(void){ 00048 OS_TASKENTRY *pOsTask; 00049 #if(OS_CRITICAL_METHOD==3) 00050 U32 CpuEflags; 00051 #endif 00052 00053 OsEnterCritical(); 00054 pOsTask=(OS_TASKENTRY *)OsTaskCurrent; 00055 OsTaskFreeTaskPut(pOsTask); 00056 OsTaskSwitchOut(); 00057 OsExitCritical(); 00058 } 00059 00060 OS_BOOL OsDelete(U8 *pTaskName){ 00061 #if(OS_CRITICAL_METHOD==3) 00062 U32 CpuEflags; 00063 #endif 00064 00065 OsEnterCritical(); 00066 if(OsTaskReadyTaskFind(pTaskName)==OS_TRUE){ 00067 OsTaskReadyTaskDelete(pTaskName); 00068 OsExitCritical(); 00069 return OS_TRUE; 00070 } 00071 else if(OsEventTaskFind(pTaskName)==OS_TRUE){ 00072 OsEventTaskDelete(pTaskName); 00073 OsExitCritical(); 00074 return OS_TRUE; 00075 } 00076 else if(OsResourceTaskFind(pTaskName)==OS_TRUE){ 00077 OsResourceTaskDelete(pTaskName); 00078 OsExitCritical(); 00079 return OS_TRUE; 00080 } 00081 else{ 00082 OsExitCritical(); 00083 return OS_FALSE; 00084 } 00085 }
1.5.9