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

nrf52833 NRF_ERROR_NO_MEM

Hello,

I am having an issue with the nRF52833. I'm using the NRF5SDK, version 16, and the SoftDevice s113 version 7.0.1. I can take the ble_app_uart example from the sdk (located here: /examples/ble_peripheral/ble_app_uart/pca10100/s113/ses/main.c) and replace the main method with this, and it works:

#include "assert.h"
#include "nrf_sdm.h"
static void sd_fault_handler(uint32_t id, uint32_t pc, uint32_t info)
{
  while (1){};
}
/**@brief Application main function.
 */
int main(void)
{
   SystemCoreClockUpdate();

  uint32_t err_code = 0;

  const nrf_clock_lf_cfg_t clk_cfg = {
    .source = NRF_CLOCK_LF_SRC_RC,
    .rc_ctiv = 16, // Interval in 0.25 s, 16 * 0.25 = 4 sec
    .rc_temp_ctiv = 2, // Check temperature every .rc_ctiv, but calibrate every .rc_temp_ctiv 
    .accuracy = 0,
  };

  err_code = sd_softdevice_enable(&clk_cfg, sd_fault_handler);
  assert(err_code == NRF_SUCCESS);

   // register for interrupts
  sd_nvic_EnableIRQ(SD_EVT_IRQn);

  uint32_t ram_base = 0;
 nrf_sdh_ble_app_ram_start_get(&ram_base);
 err_code = sd_ble_enable(&ram_base);
 assert(err_code == NRF_SUCCESS);

    // Enter main loop.
    for (;;)
    {
        idle_state_handle();
    }
}

While this is nice, I need to be able to create projects outside of the SDK. When I moved this example, the call to sd_ble_enable failed with NRF_ERROR_NO_MEM. This is unexpected because I used the same flash_placement.xml, sdk_config.h, and the same .emProject file (except for changing the include paths). What could be causing this, and how to fix it? 

For reference, i've included the steps and modifications I made when copying the example code outside the SDK. 

example copied: /examples/ble_peripheral/ble_app_uart/pca10100/s113/ses/

directory layout: 

/ses (copied example)/
                        sdk_config.h
                        ble_app_uart_pca10100_s113.emProject
                        flash_placement.xml
                        main.c
/SDK/nrf5sdk
            all the sdk files, untouched

modifications to .emProject file:

In the definition of c_user_include_directories, I got rid of ../../../config (i didn't see this file in /examples/ble_peripheral/ble_app_uart anyway), and I got rid of ../config (I copied the sdk_config.h file to the new location of .emProject). I then replaced '../../../../../..' with '../SDK/nrf5sdk'

.emProject file: (included in case anyone is confused about how the include paths were renamed)

<!DOCTYPE CrossStudio_Project_File>
<solution Name="ble_app_uart_pca10100_s113" target="8" version="2">
  <project Name="ble_app_uart_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;BOARD_PCA10100;CONFIG_GPIO_AS_PINRESET;FLOAT_ABI_HARD;INITIALIZE_USER_SECTIONS;NO_VTOR_CONFIG;NRF52833_XXAA;NRF_SD_BLE_API_VERSION=7;S113;SOFTDEVICE_PRESENT;"
      c_user_include_directories=".;../SDK/nrf5sdk/components;../SDK/nrf5sdk/components/ble/ble_advertising;../SDK/nrf5sdk/components/ble/ble_dtm;../SDK/nrf5sdk/components/ble/ble_link_ctx_manager;../SDK/nrf5sdk/components/ble/ble_racp;../SDK/nrf5sdk/components/ble/ble_services/ble_ancs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_ans_c;../SDK/nrf5sdk/components/ble/ble_services/ble_bas;../SDK/nrf5sdk/components/ble/ble_services/ble_bas_c;../SDK/nrf5sdk/components/ble/ble_services/ble_cscs;../SDK/nrf5sdk/components/ble/ble_services/ble_cts_c;../SDK/nrf5sdk/components/ble/ble_services/ble_dfu;../SDK/nrf5sdk/components/ble/ble_services/ble_dis;../SDK/nrf5sdk/components/ble/ble_services/ble_gls;../SDK/nrf5sdk/components/ble/ble_services/ble_hids;../SDK/nrf5sdk/components/ble/ble_services/ble_hrs;../SDK/nrf5sdk/components/ble/ble_services/ble_hrs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_hts;../SDK/nrf5sdk/components/ble/ble_services/ble_ias;../SDK/nrf5sdk/components/ble/ble_services/ble_ias_c;../SDK/nrf5sdk/components/ble/ble_services/ble_lbs;../SDK/nrf5sdk/components/ble/ble_services/ble_lbs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_lls;../SDK/nrf5sdk/components/ble/ble_services/ble_nus;../SDK/nrf5sdk/components/ble/ble_services/ble_nus_c;../SDK/nrf5sdk/components/ble/ble_services/ble_rscs;../SDK/nrf5sdk/components/ble/ble_services/ble_rscs_c;../SDK/nrf5sdk/components/ble/ble_services/ble_tps;../SDK/nrf5sdk/components/ble/common;../SDK/nrf5sdk/components/ble/nrf_ble_gatt;../SDK/nrf5sdk/components/ble/nrf_ble_qwr;../SDK/nrf5sdk/components/ble/peer_manager;../SDK/nrf5sdk/components/boards;../SDK/nrf5sdk/components/libraries/atomic;../SDK/nrf5sdk/components/libraries/atomic_fifo;../SDK/nrf5sdk/components/libraries/atomic_flags;../SDK/nrf5sdk/components/libraries/balloc;../SDK/nrf5sdk/components/libraries/bootloader/ble_dfu;../SDK/nrf5sdk/components/libraries/bsp;../SDK/nrf5sdk/components/libraries/button;../SDK/nrf5sdk/components/libraries/cli;../SDK/nrf5sdk/components/libraries/crc16;../SDK/nrf5sdk/components/libraries/crc32;../SDK/nrf5sdk/components/libraries/crypto;../SDK/nrf5sdk/components/libraries/csense;../SDK/nrf5sdk/components/libraries/csense_drv;../SDK/nrf5sdk/components/libraries/delay;../SDK/nrf5sdk/components/libraries/ecc;../SDK/nrf5sdk/components/libraries/experimental_section_vars;../SDK/nrf5sdk/components/libraries/experimental_task_manager;../SDK/nrf5sdk/components/libraries/fds;../SDK/nrf5sdk/components/libraries/fifo;../SDK/nrf5sdk/components/libraries/fstorage;../SDK/nrf5sdk/components/libraries/gfx;../SDK/nrf5sdk/components/libraries/gpiote;../SDK/nrf5sdk/components/libraries/hardfault;../SDK/nrf5sdk/components/libraries/hci;../SDK/nrf5sdk/components/libraries/led_softblink;../SDK/nrf5sdk/components/libraries/log;../SDK/nrf5sdk/components/libraries/log/src;../SDK/nrf5sdk/components/libraries/low_power_pwm;../SDK/nrf5sdk/components/libraries/mem_manager;../SDK/nrf5sdk/components/libraries/memobj;../SDK/nrf5sdk/components/libraries/mpu;../SDK/nrf5sdk/components/libraries/mutex;../SDK/nrf5sdk/components/libraries/pwm;../SDK/nrf5sdk/components/libraries/pwr_mgmt;../SDK/nrf5sdk/components/libraries/queue;../SDK/nrf5sdk/components/libraries/ringbuf;../SDK/nrf5sdk/components/libraries/scheduler;../SDK/nrf5sdk/components/libraries/sdcard;../SDK/nrf5sdk/components/libraries/slip;../SDK/nrf5sdk/components/libraries/sortlist;../SDK/nrf5sdk/components/libraries/spi_mngr;../SDK/nrf5sdk/components/libraries/stack_guard;../SDK/nrf5sdk/components/libraries/strerror;../SDK/nrf5sdk/components/libraries/svc;../SDK/nrf5sdk/components/libraries/timer;../SDK/nrf5sdk/components/libraries/twi_mngr;../SDK/nrf5sdk/components/libraries/twi_sensor;../SDK/nrf5sdk/components/libraries/uart;../SDK/nrf5sdk/components/libraries/usbd;../SDK/nrf5sdk/components/libraries/usbd/class/audio;../SDK/nrf5sdk/components/libraries/usbd/class/cdc;../SDK/nrf5sdk/components/libraries/usbd/class/cdc/acm;../SDK/nrf5sdk/components/libraries/usbd/class/hid;../SDK/nrf5sdk/components/libraries/usbd/class/hid/generic;../SDK/nrf5sdk/components/libraries/usbd/class/hid/kbd;../SDK/nrf5sdk/components/libraries/usbd/class/hid/mouse;../SDK/nrf5sdk/components/libraries/usbd/class/msc;../SDK/nrf5sdk/components/libraries/util;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/ac_rec_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/ble_oob_advdata_parser;../SDK/nrf5sdk/components/nfc/ndef/conn_hand_parser/le_oob_rec_parser;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ac_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_oob_advdata;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_pair_lib;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ble_pair_msg;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/common;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/ep_oob_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/hs_rec;../SDK/nrf5sdk/components/nfc/ndef/connection_handover/le_oob_rec;../SDK/nrf5sdk/components/nfc/ndef/generic/message;../SDK/nrf5sdk/components/nfc/ndef/generic/record;../SDK/nrf5sdk/components/nfc/ndef/launchapp;../SDK/nrf5sdk/components/nfc/ndef/parser/message;../SDK/nrf5sdk/components/nfc/ndef/parser/record;../SDK/nrf5sdk/components/nfc/ndef/text;../SDK/nrf5sdk/components/nfc/ndef/uri;../SDK/nrf5sdk/components/nfc/platform;../SDK/nrf5sdk/components/nfc/t2t_lib;../SDK/nrf5sdk/components/nfc/t2t_parser;../SDK/nrf5sdk/components/nfc/t4t_lib;../SDK/nrf5sdk/components/nfc/t4t_parser/apdu;../SDK/nrf5sdk/components/nfc/t4t_parser/cc_file;../SDK/nrf5sdk/components/nfc/t4t_parser/hl_detection_procedure;../SDK/nrf5sdk/components/nfc/t4t_parser/tlv;../SDK/nrf5sdk/components/softdevice/common;../SDK/nrf5sdk/components/softdevice/s113/headers;../SDK/nrf5sdk/components/softdevice/s113/headers/nrf52;../SDK/nrf5sdk/components/toolchain/cmsis/include;../SDK/nrf5sdk/external/fprintf;../SDK/nrf5sdk/external/segger_rtt;../SDK/nrf5sdk/external/utf_converter;../SDK/nrf5sdk/integration/nrfx;../SDK/nrf5sdk/integration/nrfx/legacy;../SDK/nrf5sdk/modules/nrfx;../SDK/nrf5sdk/modules/nrfx/drivers/include;../SDK/nrf5sdk/modules/nrfx/hal;../SDK/nrf5sdk/modules/nrfx/mdk;"
      debug_additional_load_file="../SDK/nrf5sdk/components/softdevice/s113/hex/s113_nrf52_7.0.1_softdevice.hex"
      debug_register_definition_file="../SDK/nrf5sdk/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=0x20001058;RAM_SIZE=0x1efa8"
      linker_section_placements_segments="FLASH RX 0x0 0x80000;RAM RWX 0x20000000 0x20000"
      macros="CMSIS_CONFIG_TOOL=../SDK/nrf5sdk/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_Log">
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_backend_rtt.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_backend_serial.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_default_backends.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_frontend.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/log/src/nrf_log_str_formatter.c" />
    </folder>
    <folder Name="nRF_Libraries">
      <file file_name="../SDK/nrf5sdk/components/libraries/button/app_button.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error_handler_gcc.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_error_weak.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/fifo/app_fifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/scheduler/app_scheduler.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/timer/app_timer2.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/uart/app_uart_fifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/app_util_platform.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/timer/drv_rtc.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/hardfault/hardfault_implementation.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/util/nrf_assert.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic_fifo/nrf_atfifo.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic_flags/nrf_atflags.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/atomic/nrf_atomic.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/balloc/nrf_balloc.c" />
      <file file_name="../SDK/nrf5sdk/external/fprintf/nrf_fprintf.c" />
      <file file_name="../SDK/nrf5sdk/external/fprintf/nrf_fprintf_format.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/memobj/nrf_memobj.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/pwr_mgmt/nrf_pwr_mgmt.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/ringbuf/nrf_ringbuf.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/experimental_section_vars/nrf_section_iter.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/sortlist/nrf_sortlist.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/strerror/nrf_strerror.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/uart/retarget.c" />
    </folder>
    <folder Name="None">
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/ses_startup_nrf52833.s" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/ses_startup_nrf_common.s" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/mdk/system_nrf52833.c" />
    </folder>
    <folder Name="Board Definition">
      <file file_name="../SDK/nrf5sdk/components/boards/boards.c" />
    </folder>
    <folder Name="nRF_Drivers">
      <file file_name="../SDK/nrf5sdk/integration/nrfx/legacy/nrf_drv_clock.c" />
      <file file_name="../SDK/nrf5sdk/integration/nrfx/legacy/nrf_drv_uart.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/soc/nrfx_atomic.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_clock.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_gpiote.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/prs/nrfx_prs.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_uart.c" />
      <file file_name="../SDK/nrf5sdk/modules/nrfx/drivers/src/nrfx_uarte.c" />
    </folder>
    <folder Name="Board Support">
      <file file_name="../SDK/nrf5sdk/components/libraries/bsp/bsp.c" />
      <file file_name="../SDK/nrf5sdk/components/libraries/bsp/bsp_btn_ble.c" />
    </folder>
    <folder Name="Application">
      <file file_name="../config/sdk_config.h" />
      <file file_name="main.c" />
    </folder>
    <folder Name="nRF_Segger_RTT">
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT.c" />
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT_Syscalls_SES.c" />
      <file file_name="../SDK/nrf5sdk/external/segger_rtt/SEGGER_RTT_printf.c" />
    </folder>
    <folder Name="nRF_BLE">
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_advdata.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/ble_advertising/ble_advertising.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_conn_params.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_conn_state.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/ble_link_ctx_manager/ble_link_ctx_manager.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/common/ble_srv_common.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/nrf_ble_gatt/nrf_ble_gatt.c" />
      <file file_name="../SDK/nrf5sdk/components/ble/nrf_ble_qwr/nrf_ble_qwr.c" />
    </folder>
    <folder Name="UTF8/UTF16 converter">
      <file file_name="../SDK/nrf5sdk/external/utf_converter/utf.c" />
    </folder>
    <folder Name="nRF_BLE_Services">
      <file file_name="../SDK/nrf5sdk/components/ble/ble_services/ble_nus/ble_nus.c" />
    </folder>
    <folder Name="nRF_SoftDevice">
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh.c" />
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh_ble.c" />
      <file file_name="../SDK/nrf5sdk/components/softdevice/common/nrf_sdh_soc.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 Reply Children
  • I re-copied the example, set a macro for SDK_ROOT, and got it to work (third/fourth time). I'm guessing something was getting corrupted in the .emProject file (during the process of renaming the include paths) but for some reason it wasn't so bad this time. It's also possible that I had copied a configuration parameter wrong. 

    Anyway, Vidar, thank you for helping verify the memory layout, for the helpful links to the Nordic documentation, and for the advice about best practices for moving an example. 

    Also, to answer your question, I verified that ram_base was getting set to RAM_START by nrf_sdh_ble_app_ram_start_get(). And when I initially got the error code, I updated RAM_START to the value ram_base was set to by sd_ble_enable().

  • Thanks for the update, I'm glad to hear that it works now.

    Also, to answer your question, I verified that ram_base was getting set to RAM_START by nrf_sdh_ble_app_ram_start_get(). And when I initially got the error code, I updated RAM_START to the value ram_base was set to by sd_ble_enable().

    It sounds like you are doing everything correctly. I assumed it had to be a mismatch between the address returned from nrf_sdh_ble_app_ram_start_get() and RAM_START. Anyway, just let me know if you run into this problem again.

Related