@@ -1046,3 +1046,67 @@ void operator delete[](void *ptr)
1046
1046
free (ptr);
1047
1047
}
1048
1048
}
1049
+
1050
+ #if defined(MBED_CONF_RTOS_PRESENT) && defined(MBED_TRAP_ERRORS_ENABLED) && MBED_TRAP_ERRORS_ENABLED
1051
+
1052
+ static const char * error_msg (int32_t status)
1053
+ {
1054
+ switch (status) {
1055
+ case osError:
1056
+ return " Unspecified RTOS error" ;
1057
+ case osErrorTimeout:
1058
+ return " Operation not completed within the timeout period" ;
1059
+ case osErrorResource:
1060
+ return " Resource not available" ;
1061
+ case osErrorParameter:
1062
+ return " Parameter error" ;
1063
+ case osErrorNoMemory:
1064
+ return " System is out of memory" ;
1065
+ case osErrorISR:
1066
+ return " Not allowed in ISR context" ;
1067
+ default :
1068
+ return " Unknown" ;
1069
+ }
1070
+ }
1071
+
1072
+ extern " C" void EvrRtxKernelError (int32_t status)
1073
+ {
1074
+ error (" Kernel error %i: %s\r\n " , status, error_msg (status));
1075
+ }
1076
+
1077
+ extern " C" void EvrRtxThreadError (osThreadId_t thread_id, int32_t status)
1078
+ {
1079
+ error (" Thread %p error %i: %s\r\n " , thread_id, status, error_msg (status));
1080
+ }
1081
+
1082
+ extern " C" void EvrRtxTimerError (osTimerId_t timer_id, int32_t status)
1083
+ {
1084
+ error (" Timer %p error %i: %s\r\n " , timer_id, status, error_msg (status));
1085
+ }
1086
+
1087
+ extern " C" void EvrRtxEventFlagsError (osEventFlagsId_t ef_id, int32_t status)
1088
+ {
1089
+ error (" Event %p error %i: %s\r\n " , ef_id, status, error_msg (status));
1090
+ }
1091
+
1092
+ extern " C" void EvrRtxMutexError (osMutexId_t mutex_id, int32_t status)
1093
+ {
1094
+ error (" Mutex %p error %i: %s\r\n " , mutex_id, status, error_msg (status));
1095
+ }
1096
+
1097
+ extern " C" void EvrRtxSemaphoreError (osSemaphoreId_t semaphore_id, int32_t status)
1098
+ {
1099
+ error (" Semaphore %p error %i\r\n " , semaphore_id, status);
1100
+ }
1101
+
1102
+ extern " C" void EvrRtxMemoryPoolError (osMemoryPoolId_t mp_id, int32_t status)
1103
+ {
1104
+ error (" Memory Pool %p error %i\r\n " , mp_id, status);
1105
+ }
1106
+
1107
+ extern " C" void EvrRtxMessageQueueError (osMessageQueueId_t mq_id, int32_t status)
1108
+ {
1109
+ error (" Message Queue %p error %i\r\n " , mq_id, status);
1110
+ }
1111
+
1112
+ #endif
0 commit comments