123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- #include "nrf.h"
- #include <stdio.h>
- #include "app_error.h"
- #include "nordic_common.h"
- #include "sdk_errors.h"
- void app_error_handler_bare(ret_code_t error_code)
- {
- error_info_t error_info =
- {
- .line_num = 0,
- .p_file_name = NULL,
- .err_code = error_code,
- };
- app_error_fault_handler(NRF_FAULT_ID_SDK_ERROR, 0, (uint32_t)(&error_info));
- UNUSED_VARIABLE(error_info);
- }
- void app_error_save_and_stop(uint32_t id, uint32_t pc, uint32_t info)
- {
-
- static volatile struct
- {
- uint32_t fault_id;
- uint32_t pc;
- uint32_t error_info;
- assert_info_t * p_assert_info;
- error_info_t * p_error_info;
- ret_code_t err_code;
- uint32_t line_num;
- const uint8_t * p_file_name;
- } m_error_data = {0};
-
-
- volatile bool loop = true;
- UNUSED_VARIABLE(loop);
- m_error_data.fault_id = id;
- m_error_data.pc = pc;
- m_error_data.error_info = info;
- switch (id)
- {
- case NRF_FAULT_ID_SDK_ASSERT:
- m_error_data.p_assert_info = (assert_info_t *)info;
- m_error_data.line_num = m_error_data.p_assert_info->line_num;
- m_error_data.p_file_name = m_error_data.p_assert_info->p_file_name;
- break;
- case NRF_FAULT_ID_SDK_ERROR:
- m_error_data.p_error_info = (error_info_t *)info;
- m_error_data.err_code = m_error_data.p_error_info->err_code;
- m_error_data.line_num = m_error_data.p_error_info->line_num;
- m_error_data.p_file_name = m_error_data.p_error_info->p_file_name;
- break;
- }
- UNUSED_VARIABLE(m_error_data);
-
- __disable_irq();
- while (loop);
- __enable_irq();
- }
|