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

Trying to combine BLE Central UART with NFC URI examples

This is a beginner question and may well related to a misplaced setting in Segger Embedded Studio.

I am working towards a BLE scanner application which will include NFC tag capability.

To start me off I copied the NFC code from the record_url example and pasted this into the ble_app_uart_c example.

I updated my compile options to include the NFC libararies etc.

However, when building I am getting these errors saying " undefined reference to" etc.

I cannot work out what's the cause as I have checked all my references with the original project and they appear to match. Maybe I missed something.

Thanks

[code]

Building 'ble_app_###_pca10040_s132' from solution 'ble_app_###_pca10040_s132' in configuration 'Release'
  Assembling 'thumb_crt0.s'
  Compiling 'bsp_btn_ble.c'
  Compiling 'bsp.c'
  Compiling 'nrf_hw_backend_init.c'
  Compiling 'nrf_hw_backend_rng.c'
  Compiling 'nrf_hw_backend_rng_mbedtls.c'
  Compiling 'app_button.c'
  Compiling 'app_error_handler_gcc.c'
  Compiling 'app_error.c'
  Compiling 'app_timer2.c'
  Compiling 'app_scheduler.c'
  Compiling 'app_error_weak.c'
  Compiling 'app_util_platform.c'
  Compiling 'crc16.c'
  Compiling 'fds.c'
  Compiling 'drv_rtc.c'
  Compiling 'hardfault_implementation.c'
  Compiling 'mem_manager.c'
  Compiling 'nrf_assert.c'
  Compiling 'nrf_atfifo.c'
  Compiling 'nrf_atflags.c'
  Compiling 'nrf_atomic.c'
  Compiling 'nrf_balloc.c'
  Compiling 'nrf_fprintf.c'
  Compiling 'nrf_fstorage.c'
  Compiling 'nrf_fprintf_format.c'
  Compiling 'nrf_memobj.c'
  Compiling 'nrf_fstorage_sd.c'
  Compiling 'nrf_pwr_mgmt.c'
  Compiling 'nrf_queue.c'
  Compiling 'nrf_ringbuf.c'
  Compiling 'nrf_sortlist.c'
  Compiling 'nrf_section_iter.c'
  Compiling 'nrf_strerror.c'
  Compiling 'app_uart.c'
  Compiling 'nrf_drv_clock.c'
  Compiling 'nrf_drv_rng.c'
  Compiling 'nrf_drv_uart.c'
  Compiling 'nrfx_atomic.c'
  Compiling 'nrfx_clock.c'
  Compiling 'nrfx_gpiote.c'
  Compiling 'nrfx_prs.c'
  Compiling 'nrfx_uart.c'
  Compiling 'nrfx_rng.c'
  Compiling 'nrfx_uarte.c'
  Compiling 'boards.c'
  Compiling 'nrf_log_backend_serial.c'
  Compiling 'nrf_log_backend_rtt.c'
  Compiling 'nrf_log_backend_uart.c'
  Compiling 'nrf_log_default_backends.c'
  Compiling 'nrf_log_str_formatter.c'
  Compiling 'nrf_log_frontend.c'
  Compiling 'aes.c'
  Compiling 'ctr_drbg.c'
  Compiling 'platform_util.c'
  Compiling 'nrf_crypto_aead.c'
  Compiling 'nrf_crypto_aes.c'
  Compiling 'nrf_crypto_aes_shared.c'
  Compiling 'nrf_crypto_ecc.c'
  Compiling 'nrf_crypto_ecdh.c'
  Compiling 'nrf_crypto_ecdsa.c'
  Compiling 'nrf_crypto_eddsa.c'
  Compiling 'nrf_crypto_error.c'
  Compiling 'nrf_crypto_hash.c'
  Compiling 'nrf_crypto_hmac.c'
  Compiling 'nrf_crypto_hkdf.c'
  Compiling 'nrf_crypto_init.c'
  Compiling 'nrf_crypto_rng.c'
  Compiling 'nrf_crypto_shared.c'
  Compiling 'main.c'
  Compiling 'SEGGER_RTT.c'
  Compiling 'SEGGER_RTT_printf.c'
  Compiling 'SEGGER_RTT_Syscalls_SES.c'
  Assembling 'ses_startup_nrf52.s'
  Assembling 'ses_startup_nrf_common.s'
  Compiling 'auth_status_tracker.c'
  Compiling 'system_nrf52.c'
  Compiling 'ble_conn_state.c'
  Compiling 'ble_advdata.c'
  Compiling 'ble_db_discovery.c'
  Compiling 'ble_srv_common.c'
  Compiling 'gatt_cache_manager.c'
  Compiling 'gatts_cache_manager.c'
  Compiling 'nrf_ble_gatt.c'
  Compiling 'id_manager.c'
  Compiling 'nrf_ble_gq.c'
  Compiling 'nrf_ble_scan.c'
  Compiling 'nrf_ble_lesc.c'
  Compiling 'peer_data_storage.c'
  Compiling 'peer_database.c'
  Compiling 'peer_id.c'
  Compiling 'peer_manager.c'
  Compiling 'peer_manager_handler.c'
  Compiling 'pm_buffer.c'
  Compiling 'security_dispatcher.c'
  Compiling 'security_manager.c'
  Compiling 'utf.c'
  Compiling 'ble_bas_c.c'
  Compiling 'ble_hrs_c.c'
  Compiling 'nrf_sdh_ble.c'
  Compiling 'nrf_sdh.c'
  Compiling 'nrf_sdh_soc.c'
  Compiling 'oberon_backend_chacha_poly_aead.c'
  Compiling 'oberon_backend_ecc.c'
  Compiling 'oberon_backend_ecdh.c'
  Compiling 'oberon_backend_eddsa.c'
  Compiling 'oberon_backend_ecdsa.c'
  Compiling 'oberon_backend_hash.c'
  Compiling 'oberon_backend_hmac.c'
  Compiling 'nfc_ndef_msg.c'
  Compiling 'nfc_ndef_record.c'
  Compiling 'nfc_platform.c'
  Compiling 'nfc_uri_rec.c'
  Compiling 'nfc_uri_msg.c'
  Linking ble_app_###_pca10040_s132.elf
    Output/Release/Obj/ble_app_###_pca10040_s132/main.o: in function `update_NFCurl':
    undefined reference to `nfc_uri_msg_encode'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nrfx_nfct_evt_handler':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:297: undefined reference to `nfc_platform_event_handler'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:307: undefined reference to `nrfx_nfct_rx'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:316: undefined reference to `nrfx_nfct_rx'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nrf_nfct_rx_frameend_handle':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:252: undefined reference to `nrfx_nfct_init_substate_force'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:277: undefined reference to `nrfx_nfct_rx'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:285: undefined reference to `nrfx_nfct_init_substate_force'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nfc_t2t_lib_al_setup':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:115: undefined reference to `nrfx_nfct_nfcid1_default_bytes_get'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:123: undefined reference to `nfc_platform_setup'
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:129: undefined reference to `nrfx_nfct_init'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nfc_t2t_lib_al_start':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:223: undefined reference to `nrfx_nfct_enable'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nfc_t2t_lib_al_send':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:234: undefined reference to `nrfx_nfct_tx'
    ../../../../../../components/nfc/t2t_lib/nfc_t2t_lib_gcc.a(nfc_t2t_lib_al.c.o): in function `nfc_t2t_lib_al_stop':
    C:\nfc\nfc-library\private\nfc_t2t_lib\armgcc/../nfc_t2t_lib_al.c:239: undefined reference to `nrfx_nfct_disable'
Build failed

[/code]

  • I did not get very far with approach shown above.

    Anyway, now that I've become more familiar with the SDK and the many BLE and NFC based examples, I thought to have a more thorough review of all the "experimental" examples.

    I finally found an experimental example in the BLE central folder which used the t2t_lib and started with this...

    I then slowly modified to convert to just a BLE central scanning process and to just to have the NDEF URL part (I had no need for pairing etc.)

    Well I am happy to say I now have this working

    I believe the problem was caused by parameters missing or not set in the sdk_config file. It is only now that I am more familiar with this file was I able to work out what to change.

    There are two Segger Embedded Studio IDE tools that were used to solve the problem. Namely:

    1. The CMSIS Configuration Wizard.

    This helped quickly identify which parameters were missing in the sdk_confiig file, which then threw up errors in the various library files when ported across.

    2. The Project -> Open Solution in Editor option

    I found that this was the quickest way to port across library folders and files and to make sure the path to each folder was correct.

  • This solution works for me too Thankyou very much for sharing.

Related