mirror of https://github.com/ARMmbed/mbed-os.git
Trap on RTX errors if enabled
If MBED_TRAP_ERRORS_ENABLED is defined to 1 then trap on RTX errors. This includes using mutexes in ISR context.pull/4389/head
parent
e48e599a9d
commit
770ad616dd
|
@ -1046,3 +1046,67 @@ void operator delete[](void *ptr)
|
|||
free(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(MBED_CONF_RTOS_PRESENT) && defined(MBED_TRAP_ERRORS_ENABLED) && MBED_TRAP_ERRORS_ENABLED
|
||||
|
||||
static const char* error_msg(int32_t status)
|
||||
{
|
||||
switch (status) {
|
||||
case osError:
|
||||
return "Unspecified RTOS error";
|
||||
case osErrorTimeout:
|
||||
return "Operation not completed within the timeout period";
|
||||
case osErrorResource:
|
||||
return "Resource not available";
|
||||
case osErrorParameter:
|
||||
return "Parameter error";
|
||||
case osErrorNoMemory:
|
||||
return "System is out of memory";
|
||||
case osErrorISR:
|
||||
return "Not allowed in ISR context";
|
||||
default:
|
||||
return "Unknown";
|
||||
}
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxKernelError (int32_t status)
|
||||
{
|
||||
error("Kernel error %i: %s\r\n", status, error_msg(status));
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxThreadError (osThreadId_t thread_id, int32_t status)
|
||||
{
|
||||
error("Thread %p error %i: %s\r\n", thread_id, status, error_msg(status));
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxTimerError (osTimerId_t timer_id, int32_t status)
|
||||
{
|
||||
error("Timer %p error %i: %s\r\n", timer_id, status, error_msg(status));
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxEventFlagsError (osEventFlagsId_t ef_id, int32_t status)
|
||||
{
|
||||
error("Event %p error %i: %s\r\n", ef_id, status, error_msg(status));
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxMutexError (osMutexId_t mutex_id, int32_t status)
|
||||
{
|
||||
error("Mutex %p error %i: %s\r\n", mutex_id, status, error_msg(status));
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxSemaphoreError (osSemaphoreId_t semaphore_id, int32_t status)
|
||||
{
|
||||
error("Semaphore %p error %i\r\n", semaphore_id, status);
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxMemoryPoolError (osMemoryPoolId_t mp_id, int32_t status)
|
||||
{
|
||||
error("Memory Pool %p error %i\r\n", mp_id, status);
|
||||
}
|
||||
|
||||
extern "C" void EvrRtxMessageQueueError (osMessageQueueId_t mq_id, int32_t status)
|
||||
{
|
||||
error("Message Queue %p error %i\r\n", mq_id, status);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue