00001 /************************************************** 00002 * Tasking kernel file 00003 * Function: Task management 00004 * 00005 * File: os_task.c 00006 * Author: Book Chen 00007 * 2008.08.08 00008 **************************************************** 00009 */ 00010 #include "..\inc\includes.h" 00011 #include "..\os_core\os_includes.h" 00012 00013 OS_STACK OsTaskStack[MAX_TASK_NUM][TASK_STACK_SIZE]; // declare 10 task stacks 00014 OS_TCB TaskTable[MAX_TASK_NUM]; // declare task table for 10 tasks control 00015 struct OS_TASK_CONTROL OsTaskCtrl; 00016 void OsTaskPowerOnInit(void) LargeReentrant; 00017 INT8U OsTaskCreat(void (*Task)(void)) LargeReentrant; 00018 00019 void OsTaskPowerOnInit() LargeReentrant{ 00020 OsTaskCtrl.TaskNum=0; 00021 OsTaskCtrl.CurTaskId=0; 00022 OsTaskCtrl.NextTaskId=0; 00023 } 00024 INT8U OsTaskCreat(void (*Task)(void)) LargeReentrant{ 00025 if(OsTaskCtrl.TaskNum==MAX_TASK_NUM) return FALSE; // No task space 00026 TaskTable[OsTaskCtrl.TaskNum].Id=OsTaskCtrl.TaskNum; // Initial task stack...grows from top to down 00027 TaskTable[OsTaskCtrl.TaskNum].function=Task; // Function address 00028 TaskTable[OsTaskCtrl.TaskNum].Stack=OsTaskStackInit(Task,(OS_STACK *)&OsTaskStack[OsTaskCtrl.TaskNum][TASK_STACK_SIZE-1]); 00029 OsTaskCtrl.TaskNum++; 00030 } 00031