summaryrefslogtreecommitdiff
path: root/thread.h
diff options
context:
space:
mode:
Diffstat (limited to 'thread.h')
-rw-r--r--thread.h23
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