@@ -32,9 +32,11 @@ extern "C" P_TCB rt_tid2ptcb(osThreadId thread_id);
32
32
33
33
namespace rtos {
34
34
35
- Thread::Thread (osPriority priority,
36
- uint32_t stack_size, unsigned char *stack_pointer):
37
- _tid (0 ), _dynamic_stack(stack_pointer == NULL ) {
35
+ void Thread::constructor (osPriority priority,
36
+ uint32_t stack_size, unsigned char *stack_pointer) {
37
+ _tid = 0 ;
38
+ _dynamic_stack = (stack_pointer == NULL );
39
+
38
40
#if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM)
39
41
_thread_def.tpriority = priority;
40
42
_thread_def.stacksize = stack_size;
@@ -44,16 +46,9 @@ Thread::Thread(osPriority priority,
44
46
45
47
void Thread::constructor (Callback<void ()> task,
46
48
osPriority priority, uint32_t stack_size, unsigned char *stack_pointer) {
47
- _tid = 0 ;
48
- _dynamic_stack = (stack_pointer == NULL );
49
+ constructor (priority, stack_size, stack_pointer);
49
50
50
- _task = task;
51
- #if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM)
52
- _thread_def.tpriority = priority;
53
- _thread_def.stacksize = stack_size;
54
- _thread_def.stack_pointer = (uint32_t *)stack_pointer;
55
- #endif
56
- switch (start ((void (*)(const void *))Callback<void ()>::thunk, &_task)) {
51
+ switch (start (task)) {
57
52
case osErrorResource:
58
53
error (" OS ran out of threads!\n " );
59
54
break ;
@@ -67,13 +62,13 @@ void Thread::constructor(Callback<void()> task,
67
62
}
68
63
}
69
64
70
- osStatus Thread::start (void (*task)( void const *argument), void *argument ) {
71
- if (_tid != NULL ) {
65
+ osStatus Thread::start (Callback< void ()> task ) {
66
+ if (_tid != 0 ) {
72
67
return osErrorParameter;
73
68
}
74
69
75
70
#if defined(__MBED_CMSIS_RTOS_CA9) || defined(__MBED_CMSIS_RTOS_CM)
76
- _thread_def.pthread = task ;
71
+ _thread_def.pthread = ( void (*)( const void *))Callback< void ()>::thunk ;
77
72
if (_thread_def.stack_pointer == NULL ) {
78
73
_thread_def.stack_pointer = new uint32_t [_thread_def.stacksize /sizeof (uint32_t )];
79
74
if (_thread_def.stack_pointer == NULL )
@@ -85,6 +80,7 @@ osStatus Thread::start(void (*task)(void const *argument), void *argument) {
85
80
_thread_def.stack_pointer [i] = 0xE25A2EA5 ;
86
81
}
87
82
#endif
83
+ _task = task;
88
84
_tid = osThreadCreate (&_thread_def, &_task);
89
85
if (_tid == NULL ) {
90
86
if (_dynamic_stack) delete[] (_thread_def.stack_pointer );
0 commit comments