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 | 
