/* * $Id: kern_sched.h,v 1.2 2007/11/20 12:57:37 nbrk Exp $ */ #ifndef _SYS_KERN_SCHED_H #define _SYS_KERN_SCHED_H #include /* * Task header is used by user to describe task in config.c */ struct taskheader { const char *th_name; /* task name */ uint8_t th_priority; /* priority, bigger the value = higher priority */ void (*th_enter)(void); /* entry point */ }; /* * Kernel sees each system task as struct task; * it is used for scheduling and context switches. */ struct task { struct taskheader *ta_theader; /* points to user-described data */ uint8_t ta_taskid; /* task id (TID) */ uint8_t ta_state; /* task state (running, blocked, etc.) */ uint32_t ta_timeo; /* timeout (in HZ) if task is blocked */ uint32_t *ta_stackptr; /* task stack addr (used to switch-back to that task) */ struct task *ta_nextp; }; /* * Tasks states. */ #define TASK_NOSCHED 0x00 /* task not ready or halted; will not schedule this */ #define TASK_READY 0x01 /* ready for schedule */ #define TASK_RUNNING 0x02 /* running now */ #define TASK_SLEEPING 0x04 /* task waits for (planned) timeout */ /* * Functions. */ void sched_init(void); #endif /* not _SYS_KERN_SCHED_H */