diff options
Diffstat (limited to 'firmware/thread.c')
-rw-r--r-- | firmware/thread.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/firmware/thread.c b/firmware/thread.c index 281801418f..d8282111b5 100644 --- a/firmware/thread.c +++ b/firmware/thread.c | |||
@@ -78,6 +78,13 @@ void switch_thread(void) ICODE_ATTR; | |||
78 | static inline void store_context(void* addr) __attribute__ ((always_inline)); | 78 | static inline void store_context(void* addr) __attribute__ ((always_inline)); |
79 | static inline void load_context(const void* addr) __attribute__ ((always_inline)); | 79 | static inline void load_context(const void* addr) __attribute__ ((always_inline)); |
80 | 80 | ||
81 | #ifdef RB_PROFILE | ||
82 | #include <profile.h> | ||
83 | void profile_thread(void) { | ||
84 | profstart(current_thread); | ||
85 | } | ||
86 | #endif | ||
87 | |||
81 | #if defined(CPU_ARM) | 88 | #if defined(CPU_ARM) |
82 | /*--------------------------------------------------------------------------- | 89 | /*--------------------------------------------------------------------------- |
83 | * Store non-volatile context. | 90 | * Store non-volatile context. |
@@ -245,6 +252,9 @@ static inline void load_context(const void* addr) | |||
245 | */ | 252 | */ |
246 | void switch_thread(void) | 253 | void switch_thread(void) |
247 | { | 254 | { |
255 | #ifdef RB_PROFILE | ||
256 | profile_thread_stopped(current_thread); | ||
257 | #endif | ||
248 | int current; | 258 | int current; |
249 | unsigned int *stackptr; | 259 | unsigned int *stackptr; |
250 | 260 | ||
@@ -284,6 +294,9 @@ void switch_thread(void) | |||
284 | 294 | ||
285 | current_thread = current; | 295 | current_thread = current; |
286 | load_context(&thread_contexts[current]); | 296 | load_context(&thread_contexts[current]); |
297 | #ifdef RB_PROFILE | ||
298 | profile_thread_started(current_thread); | ||
299 | #endif | ||
287 | } | 300 | } |
288 | 301 | ||
289 | void sleep_thread(void) | 302 | void sleep_thread(void) |