This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

ble_app_hrs crash

Hello,

I have modified the ble_app_hrs to work with PCA10100 and softDevice S113. The application seems to function correctly, advertisements work fine and I can connect from the nRFToolbox android app and receive data. However, I have noticed that the app randomly crashes while in advertising mode (i.e. the debugger stops in the middle of some assembly code in embedded Studio). I have mostly modified the project file. I have also done minor modifications in sdk_config.h (i.e. NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED set to zero and NRF_LOG_BACKEND_RTT_ENABLED set to one). I have not modified main.c. The emProject file contents is copied below (For some reason I couldn't attach it as a file or copy it in the message as code).

I am using Segger Embedded Studio version 4.52b under Windows 10 x64 and sdk nRF5_SDK_16.0.0_98a08e2.

Thank you very much for your help,

Sam

<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_hrs_pca10100_s113" target="8" version="2">
<project Name="ble_app_hrs_pca10100_s113">
<configuration
Name="Common"
arm_architecture="v7EM"
arm_core_type="Cortex-M4"
arm_endian="Little"
arm_fp_abi="Hard"
arm_fpu_type="FPv4-SP-D16"
arm_linker_heap_size="2048"
arm_linker_process_stack_size="0"
arm_linker_stack_size="2048"
arm_linker_treat_warnings_as_errors="No"
arm_simulator_memory_simulation_parameter="RWX 00000000,00100000,FFFFFFFF;RWX 20000000,00010000,CDCDCDCD"
arm_target_device_name="nRF52833_xxAA"
arm_target_interface_type="SWD"
c_preprocessor_definitions="APP_TIMER_V2;APP_TIMER_V2_RTC1_ENABLED;BLE_STACK_SUPPORT_REQD;BOARD_PCA10100;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;MBEDTLS_CONFIG_FILE=&quot;nrf_crypto_mbedtls_config.h&quot;;NO_VTOR_CONFIG;NRF52;NRF52833_XXAA;NRF52_PAN_74;NRF_CRYPTO_MAX_INSTANCE_COUNT=1;NRF_SD_BLE_API_VERSION=7;S113;SOFTDEVICE_PRESENT;"
c_user_include_directories="../../../config;../../../../../../components;../../../../../../components/ble/ble_advertising;../../../../../../components/ble/ble_dtm;../../../../../../components/ble/ble_racp;../../../../../../components/ble/ble_services/ble_ancs_c;../../../../../../components/ble/ble_services/ble_ans_c;../../../../../../components/ble/ble_services/ble_bas;../../../../../../components/ble/ble_services/ble_bas_c;../../../../../../components/ble/ble_services/ble_cscs;../../../../../../components/ble/ble_services/ble_cts_c;../../../../../../components/ble/ble_services/ble_dfu;../../../../../../components/ble/ble_services/ble_dis;../../../../../../components/ble/ble_services/ble_gls;../../../../../../components/ble/ble_services/ble_hids;../../../../../../components/ble/ble_services/ble_hrs;../../../../../../components/ble/ble_services/ble_hrs_c;../../../../../../components/ble/ble_services/ble_hts;../../../../../../components/ble/ble_services/ble_ias;../../../../../../components/ble/ble_services/ble_ias_c;../../../../../../components/ble/ble_services/ble_lbs;../../../../../../components/ble/ble_services/ble_lbs_c;../../../../../../components/ble/ble_services/ble_lls;../../../../../../components/ble/ble_services/ble_nus;../../../../../../components/ble/ble_services/ble_nus_c;../../../../../../components/ble/ble_services/ble_rscs;../../../../../../components/ble/ble_services/ble_rscs_c;../../../../../../components/ble/ble_services/ble_tps;../../../../../../components/ble/common;../../../../../../components/ble/nrf_ble_gatt;../../../../../../components/ble/nrf_ble_qwr;../../../../../../components/ble/peer_manager;../../../../../../components/boards;../../../../../../components/libraries/atomic;../../../../../../components/libraries/atomic_fifo;../../../../../../components/libraries/atomic_flags;../../../../../../components/libraries/balloc;../../../../../../components/libraries/bootloader/ble_dfu;../../../../../../components/libraries/bsp;../../../../../../components/libraries/button;../../../../../../components/libraries/cli;../../../../../../components/libraries/crc16;../../../../../../components/libraries/crc32;../../../../../../components/libraries/crypto;../../../../../../components/libraries/crypto/backend/cc310;../../../../../../components/libraries/crypto/backend/cc310_bl;../../../../../../components/libraries/crypto/backend/cifra;../../../../../../components/libraries/crypto/backend/mbedtls;../../../../../../components/libraries/crypto/backend/micro_ecc;../../../../../../components/libraries/crypto/backend/nrf_hw;../../../../../../components/libraries/crypto/backend/nrf_sw;../../../../../../components/libraries/crypto/backend/oberon;../../../../../../components/libraries/crypto/backend/optiga;../../../../../../components/libraries/csense;../../../../../../components/libraries/csense_drv;../../../../../../components/libraries/delay;../../../../../../components/libraries/ecc;../../../../../../components/libraries/experimental_section_vars;../../../../../../components/libraries/experimental_task_manager;../../../../../../components/libraries/fds;../../../../../../components/libraries/fstorage;../../../../../../components/libraries/gfx;../../../../../../components/libraries/gpiote;../../../../../../components/libraries/hardfault;../../../../../../components/libraries/hci;../../../../../../components/libraries/led_softblink;../../../../../../components/libraries/log;../../../../../../components/libraries/log/src;../../../../../../components/libraries/low_power_pwm;../../../../../../components/libraries/mem_manager;../../../../../../components/libraries/memobj;../../../../../../components/libraries/mpu;../../../../../../components/libraries/mutex;../../../../../../components/libraries/pwm;../../../../../../components/libraries/pwr_mgmt;../../../../../../components/libraries/queue;../../../../../../components/libraries/ringbuf;../../../../../../components/libraries/scheduler;../../../../../../components/libraries/sdcard;../../../../../../components/libraries/sensorsim;../../../../../../components/libraries/slip;../../../../../../components/libraries/sortlist;../../../../../../components/libraries/spi_mngr;../../../../../../components/libraries/stack_guard;../../../../../../components/libraries/stack_info;../../../../../../components/libraries/strerror;../../../../../../components/libraries/svc;../../../../../../components/libraries/timer;../../../../../../components/libraries/twi_mngr;../../../../../../components/libraries/twi_sensor;../../../../../../components/libraries/usbd;../../../../../../components/libraries/usbd/class/audio;../../../../../../components/libraries/usbd/class/cdc;../../../../../../components/libraries/usbd/class/cdc/acm;../../../../../../components/libraries/usbd/class/hid;../../../../../../components/libraries/usbd/class/hid/generic;../../../../../../components/libraries/usbd/class/hid/kbd;../../../../../../components/libraries/usbd/class/hid/mouse;../../../../../../components/libraries/usbd/class/msc;../../../../../../components/libraries/util;../../../../../../components/nfc/ndef/conn_hand_parser;../../../../../../components/nfc/ndef/conn_hand_parser/ac_rec_parser;../../../../../../components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;../../../../../../components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;../../../../../../components/nfc/ndef/connection_handover/ac_rec;../../../../../../components/nfc/ndef/connection_handover/ble_oob_advdata;../../../../../../components/nfc/ndef/connection_handover/ble_pair_lib;../../../../../../components/nfc/ndef/connection_handover/ble_pair_msg;../../../../../../components/nfc/ndef/connection_handover/common;../../../../../../components/nfc/ndef/connection_handover/ep_oob_rec;../../../../../../components/nfc/ndef/connection_handover/hs_rec;../../../../../../components/nfc/ndef/connection_handover/le_oob_rec;../../../../../../components/nfc/ndef/generic/message;../../../../../../components/nfc/ndef/generic/record;../../../../../../components/nfc/ndef/launchapp;../../../../../../components/nfc/ndef/parser/message;../../../../../../components/nfc/ndef/parser/record;../../../../../../components/nfc/ndef/text;../../../../../../components/nfc/ndef/uri;../../../../../../components/nfc/platform;../../../../../../components/nfc/t2t_lib;../../../../../../components/nfc/t2t_parser;../../../../../../components/nfc/t4t_lib;../../../../../../components/nfc/t4t_parser/apdu;../../../../../../components/nfc/t4t_parser/cc_file;../../../../../../components/nfc/t4t_parser/hl_detection_procedure;../../../../../../components/nfc/t4t_parser/tlv;../../../../../../components/softdevice/common;../../../../../../components/softdevice/s113/headers;../../../../../../components/softdevice/s113/headers/nrf52;../../../../../../components/toolchain/cmsis/include;../../../../../../external/fprintf;../../../../../../external/mbedtls/include;../../../../../../external/nrf_cc310/include;../../../../../../external/nrf_oberon;../../../../../../external/nrf_oberon/include;../../../../../../external/nrf_tls/mbedtls/nrf_crypto/config;../../../../../../external/segger_rtt;../../../../../../external/utf_converter;../../../../../../integration/nrfx;../../../../../../integration/nrfx/legacy;../../../../../../modules/nrfx;../../../../../../modules/nrfx/drivers/include;../../../../../../modules/nrfx/hal;../../../../../../modules/nrfx/mdk;../config;"
debug_additional_load_file="../../../../../../components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex"
debug_register_definition_file="../../../../../../modules/nrfx/mdk/nrf52833.svd"
debug_start_from_entry_point_symbol="No"
debug_target_connection="J-Link"
gcc_debugging_level="Level 3"
gcc_entry_point="Reset_Handler"
linker_output_format="hex"
linker_printf_fmt_level="long"
linker_printf_width_precision_supported="Yes"
linker_scanf_fmt_level="long"
linker_section_placement_file="flash_placement.xml"
linker_section_placement_macros="FLASH_PH_START=0x0;FLASH_PH_SIZE=0x80000;RAM_PH_START=0x20000000;RAM_PH_SIZE=0x20000;FLASH_START=0x1c000;FLASH_SIZE=0x64000;RAM_START=0x20002700;RAM_SIZE=0x1d900"
linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x20000"
macros="CMSIS_CONFIG_TOOL=../../../../../../external_tools/cmsisconfig/CMSIS_Configuration_Wizard.jar"
project_directory=""
project_type="Executable" />
<folder Name="Segger Startup Files">
<file file_name="$(StudioDir)/source/thumb_crt0.s" />
</folder>
<folder Name="nrf_cc310">
<file file_name="../../../../../../external/nrf_cc310/lib/cortex-m4/hard-float/libnrf_cc310_0.9.12.a" />
</folder>
<folder Name="Board Support">
<file file_name="../../../../../../components/libraries/bsp/bsp.c" />
<file file_name="../../../../../../components/libraries/bsp/bsp_btn_ble.c" />
</folder>
<folder Name="nRF_Crypto backend nRF HW">
<file file_name="../../../../../../components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_init.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_rng.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/nrf_hw/nrf_hw_backend_rng_mbedtls.c" />
</folder>
<folder Name="nRF_Libraries">
<file file_name="../../../../../../components/libraries/button/app_button.c" />
<file file_name="../../../../../../components/libraries/util/app_error.c" />
<file file_name="../../../../../../components/libraries/util/app_error_handler_gcc.c" />
<file file_name="../../../../../../components/libraries/util/app_error_weak.c" />
<file file_name="../../../../../../components/libraries/scheduler/app_scheduler.c" />
<file file_name="../../../../../../components/libraries/timer/app_timer2.c" />
<file file_name="../../../../../../components/libraries/util/app_util_platform.c" />
<file file_name="../../../../../../components/libraries/crc16/crc16.c" />
<file file_name="../../../../../../components/libraries/timer/drv_rtc.c" />
<file file_name="../../../../../../components/libraries/fds/fds.c" />
<file file_name="../../../../../../components/libraries/hardfault/hardfault_implementation.c" />
<file file_name="../../../../../../components/libraries/mem_manager/mem_manager.c" />
<file file_name="../../../../../../components/libraries/util/nrf_assert.c" />
<file file_name="../../../../../../components/libraries/atomic_fifo/nrf_atfifo.c" />
<file file_name="../../../../../../components/libraries/atomic_flags/nrf_atflags.c" />
<file file_name="../../../../../../components/libraries/atomic/nrf_atomic.c" />
<file file_name="../../../../../../components/libraries/balloc/nrf_balloc.c" />
<file file_name="../../../../../../external/fprintf/nrf_fprintf.c" />
<file file_name="../../../../../../external/fprintf/nrf_fprintf_format.c" />
<file file_name="../../../../../../components/libraries/fstorage/nrf_fstorage.c" />
<file file_name="../../../../../../components/libraries/fstorage/nrf_fstorage_sd.c" />
<file file_name="../../../../../../components/libraries/memobj/nrf_memobj.c" />
<file file_name="../../../../../../components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
<file file_name="../../../../../../components/libraries/queue/nrf_queue.c" />
<file file_name="../../../../../../components/libraries/ringbuf/nrf_ringbuf.c" />
<file file_name="../../../../../../components/libraries/experimental_section_vars/nrf_section_iter.c" />
<file file_name="../../../../../../components/libraries/sortlist/nrf_sortlist.c" />
<file file_name="../../../../../../components/libraries/strerror/nrf_strerror.c" />
<file file_name="../../../../../../components/libraries/sensorsim/sensorsim.c" />
</folder>
<folder Name="nRF_Drivers">
<file file_name="../../../../../../integration/nrfx/legacy/nrf_drv_clock.c" />
<file file_name="../../../../../../integration/nrfx/legacy/nrf_drv_rng.c" />
<file file_name="../../../../../../integration/nrfx/legacy/nrf_drv_uart.c" />
<file file_name="../../../../../../modules/nrfx/soc/nrfx_atomic.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_clock.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_gpiote.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/prs/nrfx_prs.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_rng.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_uart.c" />
<file file_name="../../../../../../modules/nrfx/drivers/src/nrfx_uarte.c" />
</folder>
<folder Name="Board Definition">
<file file_name="../../../../../../components/boards/boards.c" />
</folder>
<folder Name="nRF_Log">
<file file_name="../../../../../../components/libraries/log/src/nrf_log_backend_rtt.c" />
<file file_name="../../../../../../components/libraries/log/src/nrf_log_backend_serial.c" />
<file file_name="../../../../../../components/libraries/log/src/nrf_log_backend_uart.c" />
<file file_name="../../../../../../components/libraries/log/src/nrf_log_default_backends.c" />
<file file_name="../../../../../../components/libraries/log/src/nrf_log_frontend.c" />
<file file_name="../../../../../../components/libraries/log/src/nrf_log_str_formatter.c" />
</folder>
<folder Name="nRF_TLS">
<file file_name="../../../../../../external/mbedtls/library/aes.c" />
<file file_name="../../../../../../external/mbedtls/library/ctr_drbg.c" />
</folder>
<folder Name="nRF_Oberon_Crypto">
<file file_name="../../../../../../external/nrf_oberon/lib/cortex-m4/hard-float/liboberon_3.0.1.a" />
</folder>
<folder Name="nRF_Crypto">
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_aead.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_aes.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_aes_shared.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_ecc.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_ecdh.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_ecdsa.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_eddsa.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_error.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_hash.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_hkdf.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_hmac.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_init.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_rng.c" />
<file file_name="../../../../../../components/libraries/crypto/nrf_crypto_shared.c" />
</folder>
<folder Name="Application">
<file file_name="../../../main.c" />
<file file_name="../config/sdk_config.h" />
</folder>
<folder Name="nRF_Segger_RTT">
<file file_name="../../../../../../external/segger_rtt/SEGGER_RTT.c" />
<file file_name="../../../../../../external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
<file file_name="../../../../../../external/segger_rtt/SEGGER_RTT_printf.c" />
</folder>
<folder Name="None">
<file file_name="../../../../../../modules/nrfx/mdk/ses_startup_nrf52.s" />
<file file_name="../../../../../../modules/nrfx/mdk/ses_startup_nrf_common.s" />
<file file_name="../../../../../../modules/nrfx/mdk/system_nrf52.c" />
</folder>
<folder Name="nRF_BLE">
<file file_name="../../../../../../components/ble/peer_manager/auth_status_tracker.c" />
<file file_name="../../../../../../components/ble/common/ble_advdata.c" />
<file file_name="../../../../../../components/ble/ble_advertising/ble_advertising.c" />
<file file_name="../../../../../../components/ble/common/ble_conn_params.c" />
<file file_name="../../../../../../components/ble/common/ble_conn_state.c" />
<file file_name="../../../../../../components/ble/common/ble_srv_common.c" />
<file file_name="../../../../../../components/ble/peer_manager/gatt_cache_manager.c" />
<file file_name="../../../../../../components/ble/peer_manager/gatts_cache_manager.c" />
<file file_name="../../../../../../components/ble/peer_manager/id_manager.c" />
<file file_name="../../../../../../components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
<file file_name="../../../../../../components/ble/peer_manager/nrf_ble_lesc.c" />
<file file_name="../../../../../../components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
<file file_name="../../../../../../components/ble/peer_manager/peer_data_storage.c" />
<file file_name="../../../../../../components/ble/peer_manager/peer_database.c" />
<file file_name="../../../../../../components/ble/peer_manager/peer_id.c" />
<file file_name="../../../../../../components/ble/peer_manager/peer_manager.c" />
<file file_name="../../../../../../components/ble/peer_manager/peer_manager_handler.c" />
<file file_name="../../../../../../components/ble/peer_manager/pm_buffer.c" />
<file file_name="../../../../../../components/ble/peer_manager/security_dispatcher.c" />
<file file_name="../../../../../../components/ble/peer_manager/security_manager.c" />
</folder>
<folder Name="UTF8/UTF16 converter">
<file file_name="../../../../../../external/utf_converter/utf.c" />
</folder>
<folder Name="nRF_BLE_Services">
<file file_name="../../../../../../components/ble/ble_services/ble_bas/ble_bas.c" />
<file file_name="../../../../../../components/ble/ble_services/ble_dis/ble_dis.c" />
<file file_name="../../../../../../components/ble/ble_services/ble_hrs/ble_hrs.c" />
</folder>
<folder Name="nRF_SoftDevice">
<file file_name="../../../../../../components/softdevice/common/nrf_sdh.c" />
<file file_name="../../../../../../components/softdevice/common/nrf_sdh_ble.c" />
<file file_name="../../../../../../components/softdevice/common/nrf_sdh_soc.c" />
</folder>
<folder Name="nRF_Crypto backend Oberon">
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_chacha_poly_aead.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecc.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecdh.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_ecdsa.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_eddsa.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_hash.c" />
<file file_name="../../../../../../components/libraries/crypto/backend/oberon/oberon_backend_hmac.c" />
</folder>
</project>
<configuration
Name="Release"
c_preprocessor_definitions="NDEBUG"
gcc_optimization_level="Optimize For Size" />
<configuration
Name="Debug"
c_preprocessor_definitions="DEBUG; DEBUG_NRF"
gcc_optimization_level="None" />
</solution>

Parents
  • Hi Sam, 

    How often do you see the issue ? 

    Could you check the RTT log to find which assertion occurred ? 
    Please follow the debug guide here.

    If you test with PCA10100 project inside ble_app_uart do you see the same issue ? 

  • Hi Hung,

    The problem is actually easily reproducible. I loaded the application and set a break point on the error handler. The board starts to advertise and it looks like the problem happens when the advertisement period is over after 180 seconds. I have attached a screenshot. It looked like the filename in the error handler was '*'.

    I have also tried with ble_app_uart and the same issue happens at the same moment. I have attached a screenshot.

  • I think the screenshot for ble_app_uart didn't get attached, attaching it again.

  • Hi, 
    I did a quick test here and found that the error was from line 323 in main.c 

        err_code = sd_power_system_off();
        APP_ERROR_CHECK(err_code);

    Error code 0x2006 meaning NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN. This error is normal when you running in debug mode. In debug mode the debugger will keep the chip stay awake surpassing the command to put the chip to system off. Hence the code get to the app_error_check and caused an assert. 

    Please try to test without running the debugger (use logging to debug) you should see the chip working normally. 

    A tip for debugging, if you don't see the file name, you can paste the memory address (0x2001fc70 ) into memory window, you should see the filename.

Reply
  • Hi, 
    I did a quick test here and found that the error was from line 323 in main.c 

        err_code = sd_power_system_off();
        APP_ERROR_CHECK(err_code);

    Error code 0x2006 meaning NRF_ERROR_SOC_POWER_OFF_SHOULD_NOT_RETURN. This error is normal when you running in debug mode. In debug mode the debugger will keep the chip stay awake surpassing the command to put the chip to system off. Hence the code get to the app_error_check and caused an assert. 

    Please try to test without running the debugger (use logging to debug) you should see the chip working normally. 

    A tip for debugging, if you don't see the file name, you can paste the memory address (0x2001fc70 ) into memory window, you should see the filename.

Children
Related