diff options
Diffstat (limited to 'thread.h')
-rw-r--r-- | thread.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/thread.h b/thread.h new file mode 100644 index 0000000..b69801a --- /dev/null +++ b/thread.h @@ -0,0 +1,23 @@ +#ifndef THREAD_H +#define THREAD_H + +#include <ch.h> + +#define noreturn_t __attribute__((noreturn)) void + +template<class Child, size_t stack_size> +class BaseThread { + private: + WORKING_AREA(stack_space, stack_size); + + static inline noreturn_t thread_main_wrap(void* arg) { + ((Child*)arg)->thread_main(); + } + + public: + void start(tprio_t priority = NORMALPRIO) { + chThdCreateStatic(stack_space, sizeof(stack_space), priority, (tfunc_t)thread_main_wrap, this); + } +}; + +#endif |