Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs
This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Unable to debug with Hardfault_Handler

nrf52832

SDK 14.2

My application is locking up, and finding the cause is proving to be difficult. I've enabled DEBUG and DEBUG_NRF and included the hardfault library from the SDK including the file for the compiler I'm using (GCC, hardfault_handler_gcc.c). I was hopeful seeing the calls to NRF_LOG_ERROR in Hardfault_c_handler() that I might get some information about what is happening, but best I can tell this function is never executed. 

Using Segger's Ozone debugger, I can tell that the call stack halts on <Hardfault_Exception> but no error messages are provided. I've attempted trying to override Hardfault_process() and explicitly generate hardfaults using hardfault_genhf.h functions, but no information is ever provided in RTT. Any ideas on what I'm missing?

Parents
  • Hi,

     

    We have a known issue with GCC in SDK v14.2, where the define "NRF_BREAKPOINT_COND" expands to __builtin_trap(), which fails with newlib-nano.

    Here's the section in app_util_platform.h:

    #if defined(__GNUC__)
    #define NRF_BREAKPOINT __builtin_trap() // Expands to _exit()
     
    Define this to a __NOP() or an actual breakpoint "__asm__("BKPT 0");", and the "app_error" assert handler (and the SDK hardfault handler library) should work normally with GCC.
    Could you try this, and report back the fault-details?
     
    Cheers,
    Håkon
  • Hi Hakon, 

    Thanks for your response. I've tried changing NRF_BREAKPOINT to either __NOP() or __asm__("BKPT 0"); but neither changes the behavior. 

    Also, curiously, despite hardfault_implementation.c and hardfault_handler_gcc.c being included in the build and being compiled, it does not show up in the list of sources in Ozone's analysis of the .elf. This keeps me from putting a breakpoint in those files. 

    *Addition*

    I've enabled -frecord-gcc-switches to verify the following:

    * hardfault and hardfault/nrf52/handler are being included (-I)

    * -0g and -g3 GCC flags are set

    * DEBUG and DEBUG_NRF are set

  •  

    I cannot spot anything that should provide issues debugging this library, based on your configuration and build files. Could you do a "make VERBOSE=1" just to see that the proper debug flags (optimization and debug level) are actually being passed to the compiler?

     

    Cheers,

    Håkon

  • ➜  build git:(master) ✗ make clean
    ➜  build git:(master) ✗ make flash_basicapp_vka1_s132_5.0.0 -j8 VERBOSE=1 | grep hardfault_implementation
    [ 39%] Building C object nrf5_sdk/14.2.0/CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/hardfault_implementation.c.obj
    cd /Users/todd/Projects/myproject/build/nrf5_sdk/14.2.0 && /usr/local/bin/arm-none-eabi-gcc -DBOARD_VKAB010001 -DCONFIG_GPIO_AS_PINRESET -DDCONFIG_NFCT_PINS_AS_GPIOS -DDEBUG -DDEBUG_NRF -DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_SERIES -DNRF_SD_BLE_API_VERSION=5 -DS132 -DSD_BLE_API_VERSION=5 -DSOFTDEVICE_PRESENT -I/Users/todd/Projects/myproject/config -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/device -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/boards -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/toolchain -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/toolchain/cmsis/include -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/softdevice/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/softdevice/s132/headers -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_advertising -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_dtm -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_racp -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ancs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ans_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_bas -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_bas_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_cscs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_cts_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_dfu -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_dis -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_gls -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hids -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hrs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hrs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hts -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ias -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ias_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lbs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lbs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lls -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_nus -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_nus_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_rscs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_rscs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_tps -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/nrf_ble_gatt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/nrf_ble_qwr -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/peer_manager -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/clock -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/delay -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/gpiote -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/hal -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/i2s -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/ppi -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/rtc -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/spi_master -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/timer -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/twi_master -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/uart -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/wdt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/uart -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/atomic -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/atomic_fifo -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/balloc -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/bsp -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/button -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_log -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_log/src -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_memobj -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_section_vars -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fds -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fifo -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fstorage -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/gpiote -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault/nrf52/handler -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/mem_manager -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/mutex -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/pwr_mgmt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/queue -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/scheduler -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/strerror -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/timer -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/twi_mngr -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/util -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/external/fprintf -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/external/segger_rtt  --std=gnu99 -Wall -Wno-attributes -Wno-format -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -Og -g3   -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -std=gnu11 -o CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/hardfault_implementation.c.obj   -c /Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault/hardfault_implementation.c
    /usr/local/bin/arm-none-eabi-ar qc libNRF5_SDK_14.2.0_vka1.a  CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/boards/boards.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/toolchain/system_nrf52.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/ble_advertising/ble_advertising.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_advdata.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_conn_params.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_conn_state.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_srv_common.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/nrf_ble_gatt/nrf_ble_gatt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/gatt_cache_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/gatts_cache_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/id_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_data_storage.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_database.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_id.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/pm_buffer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/pm_mutex.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/security_dispatcher.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/security_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/ble_services/ble_nus/ble_nus.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/clock/nrf_drv_clock.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/common/nrf_drv_common.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/gpiote/nrf_drv_gpiote.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/i2s/nrf_drv_i2s.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/spi_master/nrf_drv_spi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/twi_master/nrf_drv_twi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/uart/nrf_drv_uart.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/ppi/nrf_drv_ppi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/timer/nrf_drv_timer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/atomic_fifo/nrf_atfifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/uart/app_uart_fifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/balloc/nrf_balloc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp_btn_ble.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp_nfc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/button/app_button.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fds/fds.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fifo/app_fifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fstorage/nrf_fstorage.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/hardfault_implementation.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_memobj/nrf_memobj.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_rtt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_serial.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_uart.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_default_backends.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_frontend.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_str_formatter.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_section_vars/nrf_section_iter.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/queue/nrf_queue.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/scheduler/app_scheduler.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/spi_mngr/nrf_spi_mngr.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/strerror/nrf_strerror.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/timer/app_timer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/twi_mngr/nrf_twi_mngr.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_error.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_error_weak.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_util_platform.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/nrf_assert.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/sdk_mapped_flags.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh_ble.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh_soc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/fprintf/nrf_fprintf.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/fprintf/nrf_fprintf_format.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT_printf.c.obj
    
    ➜  build git:(master) ✗ make clean
    ➜  build git:(master) ✗ make flash_basicapp_vka1_s132_5.0.0 -j8 VERBOSE=1 | grep hardfault_handler_gcc
    [ 40%] Building C object nrf5_sdk/14.2.0/CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c.obj
    cd /Users/todd/Projects/myproject/build/nrf5_sdk/14.2.0 && /usr/local/bin/arm-none-eabi-gcc -DBOARD_VKAB010001 -DCONFIG_GPIO_AS_PINRESET -DDCONFIG_NFCT_PINS_AS_GPIOS -DDEBUG -DDEBUG_NRF -DNRF52 -DNRF52832 -DNRF52832_XXAA -DNRF52_SERIES -DNRF_SD_BLE_API_VERSION=5 -DS132 -DSD_BLE_API_VERSION=5 -DSOFTDEVICE_PRESENT -I/Users/todd/Projects/myproject/config -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/device -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/boards -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/toolchain -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/toolchain/cmsis/include -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/softdevice/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/softdevice/s132/headers -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_advertising -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_dtm -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_racp -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ancs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ans_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_bas -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_bas_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_cscs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_cts_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_dfu -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_dis -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_gls -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hids -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hrs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hrs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_hts -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ias -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_ias_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lbs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lbs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_lls -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_nus -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_nus_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_rscs -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_rscs_c -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/ble_services/ble_tps -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/nrf_ble_gatt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/nrf_ble_qwr -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/ble/peer_manager -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/clock -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/common -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/delay -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/gpiote -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/hal -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/i2s -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/ppi -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/rtc -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/spi_master -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/timer -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/twi_master -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/uart -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/drivers_nrf/wdt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/uart -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/atomic -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/atomic_fifo -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/balloc -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/bsp -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/button -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_log -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_log/src -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_memobj -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/experimental_section_vars -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fds -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fifo -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/fstorage -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/gpiote -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault/nrf52/handler -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/mem_manager -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/mutex -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/pwr_mgmt -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/queue -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/scheduler -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/strerror -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/timer -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/twi_mngr -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/util -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/external/fprintf -I/Users/todd/Projects/myproject/nrf5_sdk/14.2.0/external/segger_rtt  --std=gnu99 -Wall -Wno-attributes -Wno-format -ffunction-sections -fdata-sections -fno-strict-aliasing -fno-builtin --short-enums -Og -g3   -mcpu=cortex-m4 -mthumb -mabi=aapcs -mfloat-abi=hard -mfpu=fpv4-sp-d16 -std=gnu11 -o CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c.obj   -c /Users/todd/Projects/myproject/nrf5_sdk/14.2.0/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c
    /usr/local/bin/arm-none-eabi-ar qc libNRF5_SDK_14.2.0_vka1.a  CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/boards/boards.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/toolchain/system_nrf52.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/ble_advertising/ble_advertising.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_advdata.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_conn_params.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_conn_state.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/common/ble_srv_common.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/nrf_ble_gatt/nrf_ble_gatt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/gatt_cache_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/gatts_cache_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/id_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_data_storage.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_database.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_id.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/peer_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/pm_buffer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/pm_mutex.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/security_dispatcher.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/peer_manager/security_manager.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/ble/ble_services/ble_nus/ble_nus.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/clock/nrf_drv_clock.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/common/nrf_drv_common.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/gpiote/nrf_drv_gpiote.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/i2s/nrf_drv_i2s.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/spi_master/nrf_drv_spi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/twi_master/nrf_drv_twi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/uart/nrf_drv_uart.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/ppi/nrf_drv_ppi.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/drivers_nrf/timer/nrf_drv_timer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/atomic_fifo/nrf_atfifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/uart/app_uart_fifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/balloc/nrf_balloc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp_btn_ble.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/bsp/bsp_nfc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/button/app_button.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fds/fds.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fifo/app_fifo.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/fstorage/nrf_fstorage.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/hardfault_implementation.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/hardfault/nrf52/handler/hardfault_handler_gcc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_memobj/nrf_memobj.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_rtt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_serial.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_backend_uart.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_default_backends.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_frontend.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_log/src/nrf_log_str_formatter.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/experimental_section_vars/nrf_section_iter.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/queue/nrf_queue.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/scheduler/app_scheduler.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/spi_mngr/nrf_spi_mngr.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/strerror/nrf_strerror.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/timer/app_timer.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/twi_mngr/nrf_twi_mngr.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_error.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_error_weak.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/app_util_platform.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/nrf_assert.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/libraries/util/sdk_mapped_flags.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh_ble.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/components/softdevice/common/nrf_sdh_soc.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/fprintf/nrf_fprintf.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/fprintf/nrf_fprintf_format.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT_Syscalls_GCC.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT.c.obj CMakeFiles/NRF5_SDK_14.2.0_vka1.dir/external/segger_rtt/SEGGER_RTT_printf.c.obj

  • Everything looks normal. I see that you're creating a full library, then most likely linking a .elf based on the library. This is the only step I can see that differs.

    Does the .elf file list this as a function at all?

    You can check using objdump:

    $ arm-none-eabi-objdump <my.elf> -t | grep HardFault

    This should list them as functions:
    00025fde l .text 00000000 HardFault_Handler_Continue
    00025fd8 l .text 00000000 HardFault_MoveSP
    00025fbc g F .text 00000040 HardFault_Handler
    00025eac g F .text 00000110 HardFault_c_handler
    00025e88 w F .text 00000024 HardFault_process

    If that is not present as functions in your .elf file, I suspect there's some forced inlining happening under-the-hood, or some stripping of debug information due to the .o -> .a -> .elf. Here's a thread on stackoverflow which shows issues with the "naked" keyword when using a static library: https://stackoverflow.com/questions/30355013/linking-with-static-library-not-equivalent-to-linking-with-its-objects

     

    If the .elf does not have the above mentioned functions, could you try skipping the "create library" part of your build?

     

    Cheers,

    Håkon

  • I think your suspicion is correct:

    arm-none-eabi-objdump basicapp_vka1_s132_5.0.0.elf -t | grep HardFault
    00023822  w    F .text	00000002 HardFault_Handler

    vs

    arm-none-eabi-objdump libNRF5_SDK_14.2.0_vka1.a -t | grep HardFault
    00000000 l    d  .text.HardFault_process	00000000 .text.HardFault_process
    00000000 l    d  .text.HardFault_c_handler	00000000 .text.HardFault_c_handler
    00000000 l    d  .rodata.HardFault_c_handler.str1.4	00000000 .rodata.HardFault_c_handler.str1.4
    00000000  w    F .text.HardFault_process	00000024 HardFault_process
    00000000 g     F .text.HardFault_c_handler	00000118 HardFault_c_handler
    00000004       O *COM*	00000004 HardFault_p_stack
    00000000 l    d  .text.HardFault_Handler	00000000 .text.HardFault_Handler
    00000022 l       .text.HardFault_Handler	00000000 HardFault_Handler_Continue
    0000001c l       .text.HardFault_Handler	00000000 HardFault_MoveSP
    00000000 g     F .text.HardFault_Handler	00000040 HardFault_Handler
    00000000         *UND*	00000000 HardFault_c_handler

    I'll work on doing it without the library.

  • Including the SDK instead of building it as a library works. 

Reply Children
No Data
Related