From 5466218a5f9fb3d46f608806f222fcc99a306a4b Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Mon, 17 Mar 2014 15:53:45 +0100 Subject: no time scheduler --- kernel/task/include/task/task.h | 45 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 kernel/task/include/task/task.h (limited to 'kernel/task/include/task/task.h') diff --git a/kernel/task/include/task/task.h b/kernel/task/include/task/task.h new file mode 100644 index 0000000..40f18a0 --- /dev/null +++ b/kernel/task/include/task/task.h @@ -0,0 +1,45 @@ +#ifndef TASK_H +#define TASK_H + +#include "collection/list.h" + +/** + * Task control block, contains runtime + * information about tasks. + */ +struct tcb_t { + /** Stack pointer of this task. (must be first in structure) */ + char* volatile sp; + + /** Lowest address of this task's memory (inclusive). */ + char* mem_low; + + /** Highest address of this task's memory (inclusive). */ + char* mem_high; + + /** Entry function of this task. */ + void (*entry)(char); + + /** Current wait queue that this task is in.*/ + struct list_head queue; + + char id; + +}; + +/** + * Utility for declaring a task with statically allocated memory. + * Note: for a task to be scheduled, it must first be spawned (see spawn()). +*/ +#define DECLARE_TASK(name, stack_size, entry_function, pid) \ + static char _declared_stack_##name[stack_size]; \ + static struct tcb_t name = { \ + .sp = 0, \ + .mem_low = _declared_stack_##name, \ + .mem_high = _declared_stack_##name + stack_size - 1, \ + .entry = entry_function, \ + .queue = {}, \ + .id = pid \ + }; + +#endif \ No newline at end of file -- cgit v1.2.3