engine_control/source/os/release/include/kernel.h

66 lines
1.5 KiB
C
Raw Permalink Normal View History

2016-07-29 04:51:20 +00:00
/*
* kernel.h
*
* Created on: Jul 28, 2016
* Author: tkl
*/
#ifndef SOURCE_FIRMWARE_KERNEL_INTERFACE_KERNEL_H_
#define SOURCE_FIRMWARE_KERNEL_INTERFACE_KERNEL_H_
void schedule_start(void);
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
};
2016-08-18 12:25:30 +00:00
#pragma pack(push)
#pragma pack(1)
2016-07-29 04:51:20 +00:00
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;
};
2016-08-18 12:25:30 +00:00
#pragma pack(pop)
struct kernel_version {
unsigned int kernel_version;
unsigned int major_version;
unsigned int minor_version;
unsigned int build_number;
};
int get_kernel_version(struct kernel_version *version);
2016-07-29 04:51:20 +00:00
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);
2016-08-18 12:25:30 +00:00
2016-07-29 04:51:20 +00:00
void thread_exit(void);
void sleep_ms(unsigned int ms);
2016-09-20 07:06:12 +00:00
unsigned long sys_tick_get_ms(void);
2016-07-29 04:51:20 +00:00
#endif /* SOURCE_FIRMWARE_KERNEL_INTERFACE_KERNEL_H_ */