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

Upgrading to SDK 5.2.0 breaks build

I've just tried upgrading to 5.2.0 from 5.1.0. I simply downloaded the new SDK's zip file, extracted it next to the old one, and adjusted my makefile to reflect the new path.

I get a bunch of warnings and errors in S110/*.h because of asm operand constraints or something. Of note, I am using my own custom Makefile. It has been working perfectly fine. I don't suspect it to be the problem unless the build system expectations have changed since 5.1.0.

What I find really weird is the that S110 files have not changed at all (expected) but the errors seem to be happening there.


"C:/Program Files (x86)/GNU Tools ARM Embedded/4.8 2014q1/bin/arm-none-eabi-g++" -c -I. -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/app_common" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/sd_common" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/ble" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/ble/ble_services" -I"C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/gcc" -Os -mcpu=cortex-m0 -mthumb -mabi=aapcs -mfloat-abi=soft -MMD -MP -MF build/.dep/main.cpp.o.d -std=c++0x -DBLE_STACK_SUPPORT_REQD -D__HEAP_SIZE=512 -DNRF51 main.cpp -o build/main.cpp.o
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/ble_gap.h: In function 'uint32_t sd_ble_gap_sec_info_reply(uint16_t, const ble_gap_enc_info_t*, const ble_gap_sign_info_t*)':
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/nrf_svc.h:20:6: warning: asm operand 0 probably doesn't match constraints [enabled by default]
     ); \
      ^
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/ble_gap.h:850:1: note: in expansion of macro 'SVCALL'
 SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info));
 ^
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/nrf_svc.h:20:6: error: impossible constraint in 'asm'
     ); \
      ^
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/ble_gap.h:850:1: note: in expansion of macro 'SVCALL'
 SVCALL(SD_BLE_GAP_SEC_INFO_REPLY, uint32_t, sd_ble_gap_sec_info_reply(uint16_t conn_handle, ble_gap_enc_info_t const * const p_enc_info, ble_gap_sign_info_t const * const p_sign_info));
 ^
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/ble_gatts.h: In function 'uint32_t sd_ble_gatts_sys_attr_set(uint16_t, const uint8_t*, uint16_t)':
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/nrf_svc.h:20:6: warning: asm operand 0 probably doesn't match constraints [enabled by default]
     ); \
      ^
C:/Nordic~1/nRF51S~1.393/Nordic/nrf51822/Include/S110/ble_gatts.h:519:1: note: in expansion of macro 'SVCALL'
 SVCALL(SD_BLE_GATTS_SYS_ATTR_SET, uint32_t, sd_ble_gatts_sys_attr_set(uint16_t conn_handle, uint8_t const*const p_sys_attr_data, uint16_t len)); 
 ^

Anyone have any clue what could have changed?

Note: C:/Nordic~1/nRF51S~1.393 > C:\Nordic Semiconductor\nRF51 SDK_v5.2.0.39364

Parents
  • There is a bug in the SDK.

    Change:

    "bx r14" : : "I" (number) : "r0" \
    

    Into:

    "bx r14" : : "I" ((uint16_t)number) : "r0" \
    
  • Nope. In S132 2.0.0 (no alpha) there is an added GCC_CAST_CPP - but it casts to uin8_t when it should be uint16_t. This produces the following error (GCC 5.2 2015q4 Tools for ARM Embedded, Windows host):

    C:\Nordic\s132_nrf52_2.0.0\s132_nrf52_2.0.0_API\include/ble_gap.h:1419:1: note:
    in expansion of macro 'SVCALL'
     SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t
    conn_handle, uint8_t key_type, uint8_t const *p_key));
     ^
    C:\Nordic\s132_nrf52_2.0.0\s132_nrf52_2.0.0_API\include/nrf_svc.h:69:6: error: impossible constraint in 'asm'
         );                                                  
    

    Replacing uint8_t with uint16_t in nrf_svc.h so the line looks like

    #define GCC_CAST_CPP (uint16_t)
    

    fixes the problem.

Reply
  • Nope. In S132 2.0.0 (no alpha) there is an added GCC_CAST_CPP - but it casts to uin8_t when it should be uint16_t. This produces the following error (GCC 5.2 2015q4 Tools for ARM Embedded, Windows host):

    C:\Nordic\s132_nrf52_2.0.0\s132_nrf52_2.0.0_API\include/ble_gap.h:1419:1: note:
    in expansion of macro 'SVCALL'
     SVCALL(SD_BLE_GAP_AUTH_KEY_REPLY, uint32_t, sd_ble_gap_auth_key_reply(uint16_t
    conn_handle, uint8_t key_type, uint8_t const *p_key));
     ^
    C:\Nordic\s132_nrf52_2.0.0\s132_nrf52_2.0.0_API\include/nrf_svc.h:69:6: error: impossible constraint in 'asm'
         );                                                  
    

    Replacing uint8_t with uint16_t in nrf_svc.h so the line looks like

    #define GCC_CAST_CPP (uint16_t)
    

    fixes the problem.

Children
No Data
Related