26 #include "platform/mbed_retarget.h" 27 #include "platform/mbed_toolchain.h" 41 #ifndef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 42 #define MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 16 43 #else //MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 44 #if MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN > 64 48 #error "Unsupported error filename buffer length detected, max supported length is 64 chars. Please change MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN or max-error-filename-len in configuration." 52 #define MBED_ERROR_STATUS_CODE_MASK (0x0000FFFF) 53 #define MBED_ERROR_STATUS_CODE_POS (0) 54 #define MBED_ERROR_STATUS_CODE_FIELD_SIZE (16) 56 #define MBED_ERROR_STATUS_MODULE_MASK (0x00FF0000) 57 #define MBED_ERROR_STATUS_MODULE_POS (16) 58 #define MBED_ERROR_STATUS_MODULE_FIELD_SIZE (8) 60 #define MBED_ERROR_STATUS_TYPE_MASK (0x60000000) 61 #define MBED_ERROR_STATUS_TYPE_POS (29) 62 #define MBED_ERROR_STATUS_TYPE_FIELD_SIZE (2) 68 #define MAKE_MBED_ERROR(type, module, error_code) (mbed_error_status_t) \ 70 (MBED_ERROR_STATUS_CODE_MASK & (error_code << MBED_ERROR_STATUS_CODE_POS)) | \ 71 (MBED_ERROR_STATUS_MODULE_MASK & (module << MBED_ERROR_STATUS_MODULE_POS)) | \ 72 (MBED_ERROR_STATUS_TYPE_MASK & (type << MBED_ERROR_STATUS_TYPE_POS))) 74 #define MBED_GET_ERROR_TYPE( error_status ) ((error_status & MBED_ERROR_STATUS_TYPE_MASK) >> MBED_ERROR_STATUS_TYPE_POS) 75 #define MBED_GET_ERROR_MODULE( error_status ) ((error_status & MBED_ERROR_STATUS_MODULE_MASK) >> MBED_ERROR_STATUS_MODULE_POS) 76 #define MBED_GET_ERROR_CODE( error_status ) (int)((MBED_GET_ERROR_TYPE( error_status ) == MBED_ERROR_TYPE_POSIX)?(-error_status):((error_status & MBED_ERROR_STATUS_CODE_MASK) >> MBED_ERROR_STATUS_CODE_POS)) 112 #define MBED_DEFINE_POSIX_ERROR( error_name, error_code ) \ 113 MBED_ERROR_CODE_##error_name = error_code, \ 114 MBED_ERROR_##error_name = -(MBED_POSIX_ERROR_BASE + error_code) 122 #define MBED_DEFINE_SYSTEM_ERROR( error_name, error_code ) \ 123 MBED_ERROR_CODE_##error_name = MBED_SYSTEM_ERROR_BASE + error_code, \ 124 MBED_ERROR_##error_name = MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, MBED_MODULE_UNKNOWN, MBED_ERROR_CODE_##error_name) 132 #define MBED_DEFINE_CUSTOM_ERROR( error_name, error_code ) \ 133 MBED_ERROR_CODE_##error_name = MBED_CUSTOM_ERROR_BASE + error_code, \ 134 MBED_ERROR_##error_name = MAKE_MBED_ERROR(MBED_ERROR_TYPE_CUSTOM, MBED_MODULE_UNKNOWN, MBED_ERROR_CODE_##error_name) 155 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)NULL, (uint32_t)error_value, NULL, 0 ) 156 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)NULL, (uint32_t)0, NULL, 0 ) 158 #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 159 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, (const char *)MBED_FILENAME, __LINE__ ) 160 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0 , (const char *)MBED_FILENAME, __LINE__ ) 161 #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 162 #define MBED_WARNING1( error_status, error_msg, error_value ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 ) 163 #define MBED_WARNING( error_status, error_msg ) mbed_warning( error_status, (const char *)error_msg, (uint32_t)0, NULL, 0 ) 186 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)NULL, (uint32_t)error_value, NULL, 0 ) 187 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)NULL, (uint32_t)0 , NULL, 0 ) 189 #if MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 190 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)error_msg, (uint32_t)error_value, (const char *)MBED_FILENAME, __LINE__ ) 191 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)error_msg, (uint32_t)0 , (const char *)MBED_FILENAME, __LINE__ ) 192 #else //MBED_CONF_PLATFORM_ERROR_FILENAME_CAPTURE_ENABLED 193 #define MBED_ERROR1( error_status, error_msg, error_value ) mbed_error( error_status, (const char *)error_msg, (uint32_t)error_value, NULL, 0 ) 194 #define MBED_ERROR( error_status, error_msg ) mbed_error( error_status, (const char *)error_msg, (uint32_t)0 , NULL, 0 ) 209 MBED_ERROR_TYPE_SYSTEM = 0,
210 MBED_ERROR_TYPE_CUSTOM = 1,
214 MBED_ERROR_TYPE_POSIX = 3
265 MBED_MODULE_APPLICATION = 0,
266 MBED_MODULE_PLATFORM,
268 MBED_MODULE_NETWORK_STACK,
270 MBED_MODULE_MEMORY_SUBSYSTEM,
271 MBED_MODULE_FILESYSTEM,
272 MBED_MODULE_BLOCK_DEVICE,
274 MBED_MODULE_DRIVER_SERIAL,
275 MBED_MODULE_DRIVER_RTC,
276 MBED_MODULE_DRIVER_I2C,
277 MBED_MODULE_DRIVER_SPI,
278 MBED_MODULE_DRIVER_GPIO,
279 MBED_MODULE_DRIVER_ANALOG,
280 MBED_MODULE_DRIVER_DIGITAL,
281 MBED_MODULE_DRIVER_CAN,
282 MBED_MODULE_DRIVER_ETHERNET,
283 MBED_MODULE_DRIVER_CRC,
284 MBED_MODULE_DRIVER_PWM,
285 MBED_MODULE_DRIVER_QSPI,
286 MBED_MODULE_DRIVER_USB,
287 MBED_MODULE_TARGET_SDK,
289 MBED_MODULE_NETWORK_STATS,
292 MBED_MODULE_UNKNOWN = 255,
293 MBED_MODULE_MAX = MBED_MODULE_UNKNOWN
297 #define MBED_SUCCESS 0 299 #define MBED_POSIX_ERROR_BASE 0 300 #define MBED_SYSTEM_ERROR_BASE 256 301 #define MBED_CUSTOM_ERROR_BASE 4096 828 mbed_error_status_t error_status;
829 uint32_t error_address;
830 uint32_t error_value;
832 uint32_t thread_entry_address;
833 uint32_t thread_stack_size;
834 uint32_t thread_stack_mem;
835 uint32_t thread_current_sp;
836 #ifdef MBED_CONF_PLATFORM_MAX_ERROR_FILENAME_LEN 838 uint32_t error_line_number;
840 #if MBED_CONF_PLATFORM_CRASH_CAPTURE_ENABLED 841 int32_t error_reboot_count;
842 int32_t is_error_processed;
843 uint32_t crc_error_ctx;
904 #define MBED_MAKE_SYSTEM_ERROR(module, error_code) MAKE_MBED_ERROR(MBED_ERROR_TYPE_SYSTEM, module, error_code) 919 #define MBED_MAKE_CUSTOM_ERROR(module, error_code) MAKE_MBED_ERROR(MBED_ERROR_TYPE_CUSTOM, module, error_code) 934 #define MBED_MAKE_ERROR(module, error_code) MBED_MAKE_SYSTEM_ERROR(module, error_code) 1016 mbed_error_status_t
mbed_warning(mbed_error_status_t error_status,
const char *error_msg,
unsigned int error_value,
const char *filename,
int line_number);
1057 MBED_NORETURN mbed_error_status_t
mbed_error(mbed_error_status_t error_status,
const char *error_msg,
unsigned int error_value,
const char *filename,
int line_number);