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

Including nRF5 SDK for Mesh functionality in an nRF5 SDK example

Hello,


I'm integrating Nordic Mesh SDK into nRF5_SDK_15.2. I have following following guide for this:


https://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.meshsdk.v3.2.0%2Fmd_doc_getting_started_how_to_nordicSDK.html


After completing all the steps, the compiler shows following errors. I'm unable to locate the cause of error. It seems there are several constants related to
flash storage that are declared somewhere (or need to be declared). I'm not sure where they are declared or where to declare them. Can anybody please guide me?

Building ‘project’ from solution ‘project’ in configuration ‘Debug’
'Output/project Debug/Obj/thumb_crt0.o' is up to date
'Output/project Debug/Obj/nrf_log_backend_rtt.o' is up to date
'Output/project Debug/Obj/nrf_log_backend_serial.o' is up to date
'Output/project Debug/Obj/nrf_log_backend_uart.o' is up to date
'Output/project Debug/Obj/nrf_log_default_backends.o' is up to date
'Output/project Debug/Obj/nrf_log_frontend.o' is up to date
'Output/project Debug/Obj/nrf_log_str_formatter.o' is up to date
'Output/project Debug/Obj/app_button.o' is up to date
'Output/project Debug/Obj/app_error.o' is up to date
'Output/project Debug/Obj/app_error_handler_gcc.o' is up to date
'Output/project Debug/Obj/app_error_weak.o' is up to date
'Output/project Debug/Obj/app_scheduler.o' is up to date
'Output/project Debug/Obj/app_timer.o' is up to date
'Output/project Debug/Obj/app_util_platform.o' is up to date
'Output/project Debug/Obj/crc16.o' is up to date
'Output/project Debug/Obj/fds.o' is up to date
'Output/project Debug/Obj/hardfault_implementation.o' is up to date
'Output/project Debug/Obj/nrf_assert.o' is up to date
'Output/project Debug/Obj/nrf_atfifo.o' is up to date
'Output/project Debug/Obj/nrf_atflags.o' is up to date
'Output/project Debug/Obj/nrf_atomic.o' is up to date
'Output/project Debug/Obj/nrf_balloc.o' is up to date
'Output/project Debug/Obj/nrf_fprintf.o' is up to date
'Output/project Debug/Obj/nrf_fprintf_format.o' is up to date
'Output/project Debug/Obj/nrf_fstorage.o' is up to date
'Output/project Debug/Obj/nrf_fstorage_sd.o' is up to date
'Output/project Debug/Obj/nrf_memobj.o' is up to date
'Output/project Debug/Obj/nrf_pwr_mgmt.o' is up to date
'Output/project Debug/Obj/nrf_ringbuf.o' is up to date
'Output/project Debug/Obj/nrf_section_iter.o' is up to date
'Output/project Debug/Obj/nrf_strerror.o' is up to date
'Output/project Debug/Obj/sensorsim.o' is up to date
'Output/project Debug/Obj/app_pwm.o' is up to date
'Output/project Debug/Obj/ses_startup_nrf52840.o' is up to date
'Output/project Debug/Obj/ses_startup_nrf_common.o' is up to date
'Output/project Debug/Obj/system_nrf52840.o' is up to date
'Output/project Debug/Obj/boards.o' is up to date
'Output/project Debug/Obj/nrf_drv_clock.o' is up to date
'Output/project Debug/Obj/nrf_drv_uart.o' is up to date
'Output/project Debug/Obj/nrfx_clock.o' is up to date
'Output/project Debug/Obj/nrfx_gpiote.o' is up to date
'Output/project Debug/Obj/nrfx_power_clock.o' is up to date
'Output/project Debug/Obj/nrfx_prs.o' is up to date
'Output/project Debug/Obj/nrfx_uart.o' is up to date
'Output/project Debug/Obj/nrfx_uarte.o' is up to date
'Output/project Debug/Obj/nrfx_saadc.o' is up to date
'Output/project Debug/Obj/nrfx_timer.o' is up to date
'Output/project Debug/Obj/nrf_drv_ppi.o' is up to date
'Output/project Debug/Obj/nrfx_ppi.o' is up to date
'Output/project Debug/Obj/bsp.o' is up to date
'Output/project Debug/Obj/bsp_btn_ble.o' is up to date
'Output/project Debug/Obj/main.o' is up to date
'Output/project Debug/Obj/SEGGER_RTT.o' is up to date
'Output/project Debug/Obj/SEGGER_RTT_Syscalls_SES.o' is up to date
'Output/project Debug/Obj/SEGGER_RTT_printf.o' is up to date
'Output/project Debug/Obj/auth_status_tracker.o' is up to date
'Output/project Debug/Obj/ble_advdata.o' is up to date
'Output/project Debug/Obj/ble_advertising.o' is up to date
'Output/project Debug/Obj/ble_conn_params.o' is up to date
'Output/project Debug/Obj/ble_conn_state.o' is up to date
'Output/project Debug/Obj/ble_srv_common.o' is up to date
'Output/project Debug/Obj/gatt_cache_manager.o' is up to date
'Output/project Debug/Obj/gatts_cache_manager.o' is up to date
'Output/project Debug/Obj/id_manager.o' is up to date
'Output/project Debug/Obj/nrf_ble_gatt.o' is up to date
'Output/project Debug/Obj/nrf_ble_qwr.o' is up to date
'Output/project Debug/Obj/peer_data_storage.o' is up to date
'Output/project Debug/Obj/peer_database.o' is up to date
'Output/project Debug/Obj/peer_id.o' is up to date
'Output/project Debug/Obj/peer_manager.o' is up to date
'Output/project Debug/Obj/peer_manager_handler.o' is up to date
'Output/project Debug/Obj/pm_buffer.o' is up to date
'Output/project Debug/Obj/security_dispatcher.o' is up to date
'Output/project Debug/Obj/security_manager.o' is up to date
'Output/project Debug/Obj/utf.o' is up to date
'Output/project Debug/Obj/nrf_sdh.o' is up to date
'Output/project Debug/Obj/nrf_sdh_ble.o' is up to date
'Output/project Debug/Obj/nrf_sdh_soc.o' is up to date
'Output/project Debug/Obj/cue_service.o' is up to date
'Output/project Debug/Obj/scr_service.o' is up to date
'Output/project Debug/Obj/dev_service.o' is up to date
'Output/project Debug/Obj/cue_driver.o' is up to date
'Output/project Debug/Obj/rgb_driver.o' is up to date
'Output/project Debug/Obj/fds_driver.o' is up to date
'Output/project Debug/Obj/scr_timer.o' is up to date
'Output/project Debug/Obj/adc_driver.o' is up to date
'Output/project Debug/Obj/dev_name.o' is up to date
'Output/project Debug/Obj/scr_execute.o' is up to date
'Output/project Debug/Obj/dfu_driver.o' is up to date
'Output/project Debug/Obj/test_cues.o' is up to date
'Output/project Debug/Obj/test_drives.o' is up to date
'Output/project Debug/Obj/cache.o' is up to date
'Output/project Debug/Obj/ccm_soft.o' is up to date
'Output/project Debug/Obj/core_tx.o' is up to date
'Output/project Debug/Obj/core_tx_adv.o' is up to date
'Output/project Debug/Obj/core_tx_instaburst.o' is up to date
'Output/project Debug/Obj/core_tx_lpn.o' is up to date
'Output/project Debug/Obj/enc.o' is up to date
'Output/project Debug/Obj/event.o' is up to date
'Output/project Debug/Obj/fifo.o' is up to date
'Output/project Debug/Obj/flash_manager.o' is up to date
'Output/project Debug/Obj/flash_manager_defrag.o' is up to date
'Output/project Debug/Obj/flash_manager_internal.o' is up to date
'Output/project Debug/Obj/fsm.o' is up to date
'Output/project Debug/Obj/hal.o' is up to date
'Output/project Debug/Obj/heartbeat.o' is up to date
'Output/project Debug/Obj/internal_event.o' is up to date
'Output/project Debug/Obj/list.o' is up to date
'Output/project Debug/Obj/log.o' is up to date
'Output/project Debug/Obj/lpn.o' is up to date
'Output/project Debug/Obj/mesh_config.o' is up to date
'Output/project Debug/Obj/mesh_config_backend.o' is up to date
Output/project Debug/Obj/mesh_config_flashman_glue.o does not exist.
Output/project Debug/Obj/mesh_flash.o does not exist.
Compiling ‘mesh_flash.c’



mesh_flash.c
'FLASH_TIME_TO_ERASE_PAGE_US' undeclared here (not in a function)
in definition of macro 'NRF_MESH_STATIC_ASSERT'
'FLASH_TIME_TO_WRITE_ONE_WORD_US' undeclared (first use in this function); did you mean 'FLASH_TIME_TO_ERASE_PAGE_US'?
each undeclared identifier is reported only once for each function it appears in
'FLASH_TIME_TO_WRITE_ONE_WORD_US' undeclared (first use in this function); did you mean 'FLASH_TIME_TO_ERASE_PAGE_US'?
'FLASH_TIME_TO_WRITE_ONE_WORD_US' undeclared (first use in this function); did you mean 'FLASH_TIME_TO_ERASE_PAGE_US'?
Output/project Debug/Obj/mesh_lpn_subman.o does not exist.
Compiling ‘mesh_lpn_subman.c’
'Output/project Debug/Obj/mesh_mem_mem_manager.o' is up to date
Compiling ‘mesh_config_flashman_glue.c’
'FLASH_TIME_TO_WRITE_ONE_WORD_US' undeclared (first use in this function); did you mean 'FLASH_TIME_PER_WORD_US'?
in expansion of macro 'FLASH_TIME_PER_WORD_US'
each undeclared identifier is reported only once for each function it appears in
in expansion of macro 'FLASH_TIME_PER_WORD_US'
Output/project Debug/Obj/mesh_mem_packet_mgr.o does not exist.
Compiling ‘mesh_mem_packet_mgr.c’
Build failed

Parents
  • Hi Aftab, 

    Maybe it's easier that you use our ready made example in the Mesh SDK ? 

    We provided co-exist example located in \Mesh_v3.2.0\examples\sdk_coexist . You can find the documentation here

  • I have tested the "ble_app_uart_coexist" successfully. But I want to integrate mesh into our previously developed app based on nRF5_SDK_15. So basically I followed the above mentioned guide to add mesh into my app. However, having issues detailed above. I wonder what am I missing, may not mentioned in the said guide?

  • After several tries, this method was successful:

    1. Added mesh to the ble_template_app for nRF52840 (using above link)
    2. Few tweaks and projects compiled successfully
    3. Added code files from SDK15 project (our existing BLE app), few tweaks and project compiled successfully

    Now I'm looking to enable PB-GATT and proxy features. For that I'm looking into the uart co-exist example. But we really don't need light switch functionality. We we need is that the BLE provisioner (mobile app) can add and provision these devices and access the characteristics (used in the P2P SDK part). Is there a document that can help to enable these mesh features?

  • I'm not sure what could be wrong, most likely the .c files from mesh were not included properly. 

    I would suggest you to convert the ble_app_uart_coexist to nRF52840. As far as I remember you only need to change the preprocessor definitions (for example NRF52832 to NRF52840) and changing the User include path to S140

  • Please see my last comment. There is some progress.

  • Glad that it worked for you. 

    We currently don't have the documentation or example on combining the proxy (and PB-GATT) role with the normal BLE application. But I don't see any reason it wouldn't work. You would need to follow what we have in the light switch example where we enable PB-GATT and Proxy feature in mesh. 

    Note that after we provisioned, we will reset the softdevice to enable proxy service. You may need to restore your service after the provisioning as well.

  • Hello,

    I'm still working on the same project, this time for nRF52840 chip. I have modified the ble_app_template example and added mesh to it using this guide. I'm using Mesh SDK4.0.0 and nRF5 SDK 16.0.0, soft device version is v7.0.1.

    After including files in .emProject file and including user directories in the preprocessor section, changed section placement as below, project compiles successfully.

    Added mesh_main_initialize(); and mesh_main_start(); functions in the main.c file. The project compiles but debug port throws error: app: ASSERTION FAILED at :0

    If I comment out mesh_main_start(); function, the device functionality is as expected except mesh. Previously this error was also on mesh_main_initialize but I changed placement macro FLASH_PH_SIZE=0x100000 to FLASH_PH_SIZE=0x80000 and the assertion error was gone for mesh_main_initialize(). I think there is something to do with placement macros but I cannot figure out what to do.

    Also had to remove following lines from .emProject file to get rid of RTC1_Handle error.

    <file file_name="../../../../../../components/libraries/timer/app_timer2.c" />
    <file file_name="../../../../../../components/libraries/timer/drv_rtc.c" />

    User include directories: 

    ../../../ble_app_template_mesh
    ../../../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/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/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/s140/headers
    ../../../../../../components/softdevice/s140/headers/nrf52
    ../../../../../../components/toolchain/cmsis/include
    ../../../../../../external/fprintf
    ../../../../../../external/segger_rtt
    ../../../../../../external/utf_converter
    ../../../../../../integration/nrfx
    ../../../../../../integration/nrfx/legacy
    ../../../../../../modules/nrfx
    ../../../../../../modules/nrfx/drivers/include
    ../../../../../../modules/nrfx/hal
    ../../../../../../modules/nrfx/mdk
    ../config
    ../../..
    $(MESH_ROOT)/mesh/core/api
    $(MESH_ROOT)/mesh/core/include
    $(MESH_ROOT)/mesh/bearer/api
    $(MESH_ROOT)/mesh/bearer/include
    $(MESH_ROOT)/mesh/prov/api
    $(MESH_ROOT)/mesh/prov/include
    $(MESH_ROOT)/mesh/access/api
    $(MESH_ROOT)/mesh/access/include
    $(MESH_ROOT)/mesh/dfu/api
    $(MESH_ROOT)/mesh/dfu/include
    $(MESH_ROOT)/mesh/gatt/api
    $(MESH_ROOT)/mesh/gatt/include
    $(MESH_ROOT)/mesh/stack/api
    $(MESH_ROOT)/models/model_spec/common/include
    $(MESH_ROOT)/models/foundation/config/include
    $(MESH_ROOT)/models/foundation/health/include
    $(MESH_ROOT)/models/model_spec/generic_onoff/include
    $(MESH_ROOT)/external/micro-ecc
    $(MESH_ROOT)/examples/common/include
    $(MESH_ROOT)/examples/light_switch/include
    $(MESH_ROOT)/examples/light_switch/client/include

    Section placement macros:

    FLASH_PH_START=0x0
    FLASH_PH_SIZE=0x80000
    RAM_PH_START=0x20000000
    RAM_PH_SIZE=0x40000
    FLASH_START=0x27000
    FLASH_SIZE=0xd9000
    RAM_START=0x20002430
    RAM_SIZE=0x3dda0

    flash_placement.xls

    <!DOCTYPE Linker_Placement_File>
    <Root name="Flash Section Placement">
      <MemorySegment name="FLASH" start="$(FLASH_PH_START)" size="$(FLASH_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_flash" start="$(FLASH_PH_START)" size="$(FLASH_START)-$(FLASH_PH_START)" />
        <ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START)" />
        <ProgramSection alignment="4" load="Yes" name=".init" />
        <ProgramSection alignment="4" load="Yes" name=".init_rodata" />
        <ProgramSection alignment="4" load="Yes" name=".text" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_soc_observers" inputsections="*(SORT(.sdh_soc_observers*))" address_symbol="__start_sdh_soc_observers" end_symbol="__stop_sdh_soc_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_ble_observers" inputsections="*(SORT(.sdh_ble_observers*))" address_symbol="__start_sdh_ble_observers" end_symbol="__stop_sdh_ble_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".pwr_mgmt_data" inputsections="*(SORT(.pwr_mgmt_data*))" address_symbol="__start_pwr_mgmt_data" end_symbol="__stop_pwr_mgmt_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_queue" inputsections="*(.nrf_queue*)" address_symbol="__start_nrf_queue" end_symbol="__stop_nrf_queue" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_state_observers" inputsections="*(SORT(.sdh_state_observers*))" address_symbol="__start_sdh_state_observers" end_symbol="__stop_sdh_state_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_stack_observers" inputsections="*(SORT(.sdh_stack_observers*))" address_symbol="__start_sdh_stack_observers" end_symbol="__stop_sdh_stack_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_req_observers" inputsections="*(SORT(.sdh_req_observers*))" address_symbol="__start_sdh_req_observers" end_symbol="__stop_sdh_req_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_balloc" inputsections="*(.nrf_balloc*)" address_symbol="__start_nrf_balloc" end_symbol="__stop_nrf_balloc" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".cli_command" inputsections="*(.cli_command*)" address_symbol="__start_cli_command" end_symbol="__stop_cli_command" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".crypto_data" inputsections="*(SORT(.crypto_data*))" address_symbol="__start_crypto_data" end_symbol="__stop_crypto_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_const_data" inputsections="*(SORT(.log_const_data*))" address_symbol="__start_log_const_data" end_symbol="__stop_log_const_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_backends" inputsections="*(SORT(.log_backends*))" address_symbol="__start_log_backends" end_symbol="__stop_log_backends" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections" address_symbol="__start_nrf_sections" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".cli_sorted_cmd_ptrs"  inputsections="*(.cli_sorted_cmd_ptrs*)" runin=".cli_sorted_cmd_ptrs_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".fs_data"  inputsections="*(.fs_data*)" runin=".fs_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_dynamic_data"  inputsections="*(SORT(.log_dynamic_data*))" runin=".log_dynamic_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_filter_data"  inputsections="*(SORT(.log_filter_data*))" runin=".log_filter_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_mesh_flash"  inputsections="*(SORT(.nrf_mesh_flash.*))" address_symbol="__start_nrf_mesh_flash" end_symbol="__stop_nrf_mesh_flash"/>
        <ProgramSection alignment="4" load="Yes" name=".dtors" />
        <ProgramSection alignment="4" load="Yes" name=".ctors" />
        <ProgramSection alignment="4" load="Yes" name=".rodata" />
        <ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
        <ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
        <ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
        <ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
      </MemorySegment>
      <MemorySegment name="RAM" start="$(RAM_PH_START)" size="$(RAM_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_ram" start="$(RAM_PH_START)" size="$(RAM_START)-$(RAM_PH_START)" />
        <ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START)" address_symbol="__app_ram_start__"/>
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run" address_symbol="__start_nrf_sections_run" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".cli_sorted_cmd_ptrs_run" address_symbol="__start_cli_sorted_cmd_ptrs" end_symbol="__stop_cli_sorted_cmd_ptrs" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".fs_data_run" address_symbol="__start_fs_data" end_symbol="__stop_fs_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".log_dynamic_data_run" address_symbol="__start_log_dynamic_data" end_symbol="__stop_log_dynamic_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".log_filter_data_run" address_symbol="__start_log_filter_data" end_symbol="__stop_log_filter_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run_end" address_symbol="__end_nrf_sections_run" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_mesh_ram"  inputsections="*(SORT(.nrf_mesh_ram.*))" address_symbol="__start_nrf_mesh_ram" end_symbol="__stop_nrf_mesh_ram"/>
        <ProgramSection alignment="4" load="No" name=".fast_run" />
        <ProgramSection alignment="4" load="No" name=".data_run" />
        <ProgramSection alignment="4" load="No" name=".tdata_run" />
        <ProgramSection alignment="4" load="No" name=".bss" />
        <ProgramSection alignment="4" load="No" name=".tbss" />
        <ProgramSection alignment="4" load="No" name=".non_init" />
        <ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
        <ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack"  address_symbol="__StackLimit" end_symbol="__StackTop"/>
        <ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
      </MemorySegment>
    </Root>
    

Reply
  • Hello,

    I'm still working on the same project, this time for nRF52840 chip. I have modified the ble_app_template example and added mesh to it using this guide. I'm using Mesh SDK4.0.0 and nRF5 SDK 16.0.0, soft device version is v7.0.1.

    After including files in .emProject file and including user directories in the preprocessor section, changed section placement as below, project compiles successfully.

    Added mesh_main_initialize(); and mesh_main_start(); functions in the main.c file. The project compiles but debug port throws error: app: ASSERTION FAILED at :0

    If I comment out mesh_main_start(); function, the device functionality is as expected except mesh. Previously this error was also on mesh_main_initialize but I changed placement macro FLASH_PH_SIZE=0x100000 to FLASH_PH_SIZE=0x80000 and the assertion error was gone for mesh_main_initialize(). I think there is something to do with placement macros but I cannot figure out what to do.

    Also had to remove following lines from .emProject file to get rid of RTC1_Handle error.

    <file file_name="../../../../../../components/libraries/timer/app_timer2.c" />
    <file file_name="../../../../../../components/libraries/timer/drv_rtc.c" />

    User include directories: 

    ../../../ble_app_template_mesh
    ../../../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/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/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/s140/headers
    ../../../../../../components/softdevice/s140/headers/nrf52
    ../../../../../../components/toolchain/cmsis/include
    ../../../../../../external/fprintf
    ../../../../../../external/segger_rtt
    ../../../../../../external/utf_converter
    ../../../../../../integration/nrfx
    ../../../../../../integration/nrfx/legacy
    ../../../../../../modules/nrfx
    ../../../../../../modules/nrfx/drivers/include
    ../../../../../../modules/nrfx/hal
    ../../../../../../modules/nrfx/mdk
    ../config
    ../../..
    $(MESH_ROOT)/mesh/core/api
    $(MESH_ROOT)/mesh/core/include
    $(MESH_ROOT)/mesh/bearer/api
    $(MESH_ROOT)/mesh/bearer/include
    $(MESH_ROOT)/mesh/prov/api
    $(MESH_ROOT)/mesh/prov/include
    $(MESH_ROOT)/mesh/access/api
    $(MESH_ROOT)/mesh/access/include
    $(MESH_ROOT)/mesh/dfu/api
    $(MESH_ROOT)/mesh/dfu/include
    $(MESH_ROOT)/mesh/gatt/api
    $(MESH_ROOT)/mesh/gatt/include
    $(MESH_ROOT)/mesh/stack/api
    $(MESH_ROOT)/models/model_spec/common/include
    $(MESH_ROOT)/models/foundation/config/include
    $(MESH_ROOT)/models/foundation/health/include
    $(MESH_ROOT)/models/model_spec/generic_onoff/include
    $(MESH_ROOT)/external/micro-ecc
    $(MESH_ROOT)/examples/common/include
    $(MESH_ROOT)/examples/light_switch/include
    $(MESH_ROOT)/examples/light_switch/client/include

    Section placement macros:

    FLASH_PH_START=0x0
    FLASH_PH_SIZE=0x80000
    RAM_PH_START=0x20000000
    RAM_PH_SIZE=0x40000
    FLASH_START=0x27000
    FLASH_SIZE=0xd9000
    RAM_START=0x20002430
    RAM_SIZE=0x3dda0

    flash_placement.xls

    <!DOCTYPE Linker_Placement_File>
    <Root name="Flash Section Placement">
      <MemorySegment name="FLASH" start="$(FLASH_PH_START)" size="$(FLASH_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_flash" start="$(FLASH_PH_START)" size="$(FLASH_START)-$(FLASH_PH_START)" />
        <ProgramSection alignment="0x100" load="Yes" name=".vectors" start="$(FLASH_START)" />
        <ProgramSection alignment="4" load="Yes" name=".init" />
        <ProgramSection alignment="4" load="Yes" name=".init_rodata" />
        <ProgramSection alignment="4" load="Yes" name=".text" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_soc_observers" inputsections="*(SORT(.sdh_soc_observers*))" address_symbol="__start_sdh_soc_observers" end_symbol="__stop_sdh_soc_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_ble_observers" inputsections="*(SORT(.sdh_ble_observers*))" address_symbol="__start_sdh_ble_observers" end_symbol="__stop_sdh_ble_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".pwr_mgmt_data" inputsections="*(SORT(.pwr_mgmt_data*))" address_symbol="__start_pwr_mgmt_data" end_symbol="__stop_pwr_mgmt_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_queue" inputsections="*(.nrf_queue*)" address_symbol="__start_nrf_queue" end_symbol="__stop_nrf_queue" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_state_observers" inputsections="*(SORT(.sdh_state_observers*))" address_symbol="__start_sdh_state_observers" end_symbol="__stop_sdh_state_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_stack_observers" inputsections="*(SORT(.sdh_stack_observers*))" address_symbol="__start_sdh_stack_observers" end_symbol="__stop_sdh_stack_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".sdh_req_observers" inputsections="*(SORT(.sdh_req_observers*))" address_symbol="__start_sdh_req_observers" end_symbol="__stop_sdh_req_observers" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_balloc" inputsections="*(.nrf_balloc*)" address_symbol="__start_nrf_balloc" end_symbol="__stop_nrf_balloc" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".cli_command" inputsections="*(.cli_command*)" address_symbol="__start_cli_command" end_symbol="__stop_cli_command" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".crypto_data" inputsections="*(SORT(.crypto_data*))" address_symbol="__start_crypto_data" end_symbol="__stop_crypto_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_const_data" inputsections="*(SORT(.log_const_data*))" address_symbol="__start_log_const_data" end_symbol="__stop_log_const_data" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_backends" inputsections="*(SORT(.log_backends*))" address_symbol="__start_log_backends" end_symbol="__stop_log_backends" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections" address_symbol="__start_nrf_sections" />
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".cli_sorted_cmd_ptrs"  inputsections="*(.cli_sorted_cmd_ptrs*)" runin=".cli_sorted_cmd_ptrs_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".fs_data"  inputsections="*(.fs_data*)" runin=".fs_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_dynamic_data"  inputsections="*(SORT(.log_dynamic_data*))" runin=".log_dynamic_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".log_filter_data"  inputsections="*(SORT(.log_filter_data*))" runin=".log_filter_data_run"/>
        <ProgramSection alignment="4" keep="Yes" load="Yes" name=".nrf_mesh_flash"  inputsections="*(SORT(.nrf_mesh_flash.*))" address_symbol="__start_nrf_mesh_flash" end_symbol="__stop_nrf_mesh_flash"/>
        <ProgramSection alignment="4" load="Yes" name=".dtors" />
        <ProgramSection alignment="4" load="Yes" name=".ctors" />
        <ProgramSection alignment="4" load="Yes" name=".rodata" />
        <ProgramSection alignment="4" load="Yes" name=".ARM.exidx" address_symbol="__exidx_start" end_symbol="__exidx_end" />
        <ProgramSection alignment="4" load="Yes" runin=".fast_run" name=".fast" />
        <ProgramSection alignment="4" load="Yes" runin=".data_run" name=".data" />
        <ProgramSection alignment="4" load="Yes" runin=".tdata_run" name=".tdata" />
      </MemorySegment>
      <MemorySegment name="RAM" start="$(RAM_PH_START)" size="$(RAM_PH_SIZE)">
        <ProgramSection load="no" name=".reserved_ram" start="$(RAM_PH_START)" size="$(RAM_START)-$(RAM_PH_START)" />
        <ProgramSection alignment="0x100" load="No" name=".vectors_ram" start="$(RAM_START)" address_symbol="__app_ram_start__"/>
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run" address_symbol="__start_nrf_sections_run" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".cli_sorted_cmd_ptrs_run" address_symbol="__start_cli_sorted_cmd_ptrs" end_symbol="__stop_cli_sorted_cmd_ptrs" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".fs_data_run" address_symbol="__start_fs_data" end_symbol="__stop_fs_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".log_dynamic_data_run" address_symbol="__start_log_dynamic_data" end_symbol="__stop_log_dynamic_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".log_filter_data_run" address_symbol="__start_log_filter_data" end_symbol="__stop_log_filter_data" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_sections_run_end" address_symbol="__end_nrf_sections_run" />
        <ProgramSection alignment="4" keep="Yes" load="No" name=".nrf_mesh_ram"  inputsections="*(SORT(.nrf_mesh_ram.*))" address_symbol="__start_nrf_mesh_ram" end_symbol="__stop_nrf_mesh_ram"/>
        <ProgramSection alignment="4" load="No" name=".fast_run" />
        <ProgramSection alignment="4" load="No" name=".data_run" />
        <ProgramSection alignment="4" load="No" name=".tdata_run" />
        <ProgramSection alignment="4" load="No" name=".bss" />
        <ProgramSection alignment="4" load="No" name=".tbss" />
        <ProgramSection alignment="4" load="No" name=".non_init" />
        <ProgramSection alignment="4" size="__HEAPSIZE__" load="No" name=".heap" />
        <ProgramSection alignment="8" size="__STACKSIZE__" load="No" place_from_segment_end="Yes" name=".stack"  address_symbol="__StackLimit" end_symbol="__StackTop"/>
        <ProgramSection alignment="8" size="__STACKSIZE_PROCESS__" load="No" name=".stack_process" />
      </MemorySegment>
    </Root>
    

Children
Related