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>