engine_control/source/firmware/kernel/thread.h
2016-07-23 07:59:54 +02:00

62 lines
1.3 KiB
C

/*
* thread.h
*
* Created on: Apr 13, 2015
* Author: tkl
*/
#ifndef THREAD_H_
#define THREAD_H_
#define MAX_THREAD_COUNT 32
enum thread_priority {
THREAD_PRIO_IDLE = 0,
THREAD_PRIO_LOW,
THREAD_PRIO_MEDIUM,
THREAD_PRIO_HIGH
};
enum thread_status {
THREAD_STATUS_INIT = 0,
THREAD_STATUS_EXECUTING,
THREAD_STATUS_WAITING,
THREAD_STATUS_SLEEPING,
THREAD_STATUS_BLOCKING
};
struct thread_context {
stack_t *sp; /**< thread's stack pointer */
stack_t *stack; /**< thread's stack start address */
unsigned int stack_size; /**< thread's stack size */
unsigned int pid; /**< thread's process id */
enum thread_priority priority; /**< thread's priority */
enum thread_status status; /**< thread's status */
unsigned long next_executing_time;
void *wakeup_blocking_source;
struct queue_node sem_queue_node;
};
struct thread_list {
unsigned int count; //<! Number of elements in list
struct thread_context *list[MAX_THREAD_COUNT];
};
void thread_init(void);
struct thread_context *thread_create(
struct thread_context *thread,
stack_t *stack,
unsigned int stack_size,
void (*thread_func)(void *),
void *arg,
enum thread_priority priority);
void thread_switch_context(void);
void thread_exit(void);
void blocking_read_wakeup(const void *src);
#endif /* THREAD_H_ */