mirror of https://github.com/ARMmbed/mbed-os.git
RTX: Add context to osThreadCreate/Terminate
parent
259bd28c45
commit
61166870ed
|
|
@ -317,6 +317,8 @@ const osThreadDef_t os_thread_def_##name = \
|
||||||
/// \return thread ID for reference by other functions or NULL in case of error.
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);
|
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument);
|
||||||
|
|
||||||
|
osThreadId osThreadContextCreate (const osThreadDef_t *thread_def, void *argument, void *context);
|
||||||
|
|
||||||
/// Return the thread ID of the current running thread.
|
/// Return the thread ID of the current running thread.
|
||||||
/// \return thread ID for reference by other functions or NULL in case of error.
|
/// \return thread ID for reference by other functions or NULL in case of error.
|
||||||
osThreadId osThreadGetId (void);
|
osThreadId osThreadGetId (void);
|
||||||
|
|
|
||||||
|
|
@ -459,7 +459,7 @@ SVC_0_1(svcKernelRunning, int32_t, RET_int32_t)
|
||||||
SVC_0_1(svcKernelSysTick, uint32_t, RET_uint32_t)
|
SVC_0_1(svcKernelSysTick, uint32_t, RET_uint32_t)
|
||||||
|
|
||||||
static void sysThreadError (osStatus status);
|
static void sysThreadError (osStatus status);
|
||||||
osThreadId svcThreadCreate (const osThreadDef_t *thread_def, void *argument);
|
osThreadId svcThreadCreate (const osThreadDef_t *thread_def, void *argument, void *context);
|
||||||
osMessageQId svcMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);
|
osMessageQId svcMessageCreate (const osMessageQDef_t *queue_def, osThreadId thread_id);
|
||||||
|
|
||||||
// Kernel Control Service Calls
|
// Kernel Control Service Calls
|
||||||
|
|
@ -489,7 +489,7 @@ osStatus svcKernelInitialize (void) {
|
||||||
if (os_initialized == 0U) {
|
if (os_initialized == 0U) {
|
||||||
// Create OS Timers resources (Message Queue & Thread)
|
// Create OS Timers resources (Message Queue & Thread)
|
||||||
osMessageQId_osTimerMessageQ = svcMessageCreate (&os_messageQ_def_osTimerMessageQ, NULL);
|
osMessageQId_osTimerMessageQ = svcMessageCreate (&os_messageQ_def_osTimerMessageQ, NULL);
|
||||||
osThreadId_osTimerThread = svcThreadCreate(&os_thread_def_osTimerThread, NULL);
|
osThreadId_osTimerThread = svcThreadCreate(&os_thread_def_osTimerThread, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
sysThreadError(osOK);
|
sysThreadError(osOK);
|
||||||
|
|
@ -621,7 +621,7 @@ static void sysThreadError (osStatus status) {
|
||||||
__NO_RETURN void osThreadExit (void);
|
__NO_RETURN void osThreadExit (void);
|
||||||
|
|
||||||
// Thread Service Calls declarations
|
// Thread Service Calls declarations
|
||||||
SVC_2_1(svcThreadCreate, osThreadId, const osThreadDef_t *, void *, RET_pointer)
|
SVC_3_1(svcThreadCreate, osThreadId, const osThreadDef_t *, void *, void *, RET_pointer)
|
||||||
SVC_0_1(svcThreadGetId, osThreadId, RET_pointer)
|
SVC_0_1(svcThreadGetId, osThreadId, RET_pointer)
|
||||||
SVC_1_1(svcThreadTerminate, osStatus, osThreadId, RET_osStatus)
|
SVC_1_1(svcThreadTerminate, osStatus, osThreadId, RET_osStatus)
|
||||||
SVC_0_1(svcThreadYield, osStatus, RET_osStatus)
|
SVC_0_1(svcThreadYield, osStatus, RET_osStatus)
|
||||||
|
|
@ -631,7 +631,7 @@ SVC_1_1(svcThreadGetPriority, osPriority, osThreadId, RET
|
||||||
// Thread Service Calls
|
// Thread Service Calls
|
||||||
|
|
||||||
/// Create a thread and add it to Active Threads and set it to state READY
|
/// Create a thread and add it to Active Threads and set it to state READY
|
||||||
osThreadId svcThreadCreate (const osThreadDef_t *thread_def, void *argument) {
|
osThreadId svcThreadCreate (const osThreadDef_t *thread_def, void *argument, void *context) {
|
||||||
P_TCB ptcb;
|
P_TCB ptcb;
|
||||||
OS_TID tsk;
|
OS_TID tsk;
|
||||||
void *stk;
|
void *stk;
|
||||||
|
|
@ -791,14 +791,17 @@ osPriority svcThreadGetPriority (osThreadId thread_id) {
|
||||||
|
|
||||||
/// Create a thread and add it to Active Threads and set it to state READY
|
/// Create a thread and add it to Active Threads and set it to state READY
|
||||||
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) {
|
osThreadId osThreadCreate (const osThreadDef_t *thread_def, void *argument) {
|
||||||
|
return osThreadContextCreate(thread_def, argument, NULL);
|
||||||
|
}
|
||||||
|
osThreadId osThreadContextCreate (const osThreadDef_t *thread_def, void *argument, void *context) {
|
||||||
if (__get_IPSR() != 0U) {
|
if (__get_IPSR() != 0U) {
|
||||||
return NULL; // Not allowed in ISR
|
return NULL; // Not allowed in ISR
|
||||||
}
|
}
|
||||||
if (((__get_CONTROL() & 1U) == 0U) && (os_running == 0U)) {
|
if (((__get_CONTROL() & 1U) == 0U) && (os_running == 0U)) {
|
||||||
// Privileged and not running
|
// Privileged and not running
|
||||||
return svcThreadCreate(thread_def, argument);
|
return svcThreadCreate(thread_def, argument, context);
|
||||||
} else {
|
} else {
|
||||||
return __svcThreadCreate(thread_def, argument);
|
return __svcThreadCreate(thread_def, argument, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue