Beware that this post is related to an SDK in maintenance mode
More Info: Consider nRF Connect SDK for new designs

Compiling issue with SEGGER EMBEDDED STUDIO V6.30

Hi,

  I am working with the nRF5SDK , nRF Thread SDKs long time. Recently i have update segger embedded studio to V 6.30 . previously i have used v5.68

1.

for nRF 5 SDK while build the ble_blinky example code  i got an error __vfprintf.h: No such file or directory

i found the solution that by removing the SEGGER_RTT_Syscalls_SES.c .and rebuild the code it is working

but i need the solution that without removing the SEGGER_RTT_Syscalls_SES.c how to build the project

because i need to work this project in both older / newer version of segger embedded studio

2.

also tried to work with nrf thread sdk 4.2.0 -thread_simple_coap_client_pca10056 . there i am facing same error __vfprintf.h: No such file or directory

while is remove SEGGER_RTT_Syscalls_SES file and rebuild the code i am facing some other errors

 
  Linking thread_simple_coap_client_pca10056.elf
    E:/nRF5x/2.thread_4.2.0/examples/thread/simple_coap_client/pca10056/blank/ses/Output/Debug/Exe/thread_simple_coap_client_pca10056.elf: TLS sections are not adjacent:
            TLS: .tdata
        non-TLS: .bss
            TLS: .tbss
    map sections to segments failed: bad value
Build failed

Parents
  • Hello,

    I believe you already saw this thread, which discusses the upgrade to SES v6.2.0 and vfprintf() :

    https://devzone.nordicsemi.com/f/nordic-q-a/85405/nrf5-sdk-17-1-0-examples-is-not-compiling-in-latest-ses-6-20a

    I believe the same applies to SES v6.30.

    BR,

    Edvin

  • I can't understand where to put this line #if !defined(__SEGGER_RTL_VERSION) ... #endif

    and more over the removing of file is work out only for non ble_uart example codes

    for ble_uart example even removing this file also it has same error SEGGER_RTT_Syscalls_SES  

  • because i need to work this project in both older / newer version of segger embedded studio

    Try changing the SEGGER_RTT_Syscalls_SES.c to something like this:

    /*********************************************************************
    *                SEGGER Microcontroller GmbH & Co. KG                *
    *                        The Embedded Experts                        *
    **********************************************************************
    *                                                                    *
    *       (c) 2014 - 2017  SEGGER Microcontroller GmbH & Co. KG        *
    *                                                                    *
    *       www.segger.com     Support: [email protected]               *
    *                                                                    *
    **********************************************************************
    *                                                                    *
    *       SEGGER RTT * Real Time Transfer for embedded targets         *
    *                                                                    *
    **********************************************************************
    *                                                                    *
    * All rights reserved.                                               *
    *                                                                    *
    * SEGGER strongly recommends to not make any changes                 *
    * to or modify the source code of this software in order to stay     *
    * compatible with the RTT protocol and J-Link.                       *
    *                                                                    *
    * Redistribution and use in source and binary forms, with or         *
    * without modification, are permitted provided that the following    *
    * conditions are met:                                                *
    *                                                                    *
    * o Redistributions of source code must retain the above copyright   *
    *   notice, this list of conditions and the following disclaimer.    *
    *                                                                    *
    * o Redistributions in binary form must reproduce the above          *
    *   copyright notice, this list of conditions and the following      *
    *   disclaimer in the documentation and/or other materials provided  *
    *   with the distribution.                                           *
    *                                                                    *
    * o Neither the name of SEGGER Microcontroller GmbH & Co. KG         *
    *   nor the names of its contributors may be used to endorse or      *
    *   promote products derived from this software without specific     *
    *   prior written permission.                                        *
    *                                                                    *
    * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             *
    * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        *
    * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           *
    * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           *
    * DISCLAIMED. IN NO EVENT SHALL SEGGER Microcontroller BE LIABLE FOR *
    * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR           *
    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT  *
    * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;    *
    * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF      *
    * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT          *
    * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE  *
    * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH   *
    * DAMAGE.                                                            *
    *                                                                    *
    **********************************************************************
    *                                                                    *
    *       RTT version: 6.18a                                           *
    *                                                                    *
    **********************************************************************
    ---------------------------END-OF-HEADER------------------------------
    File    : SEGGER_RTT_Syscalls_SES.c
    Purpose : Reimplementation of printf, puts and __getchar using RTT 
              in SEGGER Embedded Studio.
              To use RTT for printf output, include this file in your 
              application.
    Revision: $Rev: 4351 $
    ----------------------------------------------------------------------
    */
    #include "sdk_config.h"
    #if !defined(__SEGGER_RTL_VERSION)
    #if !defined(RETARGET_ENABLED) || RETARGET_ENABLED == 0
    #if (defined __SES_ARM) || (defined __CROSSWORKS_ARM)
      
    #include "SEGGER_RTT.h"
    #include <stdarg.h>
    #include <stdio.h>
    #include "limits.h"
    #include "__libc.h"
    #include "__vfprintf.h"
    
    /*********************************************************************
    *
    *       Defines, configurable
    *
    **********************************************************************
    */
    //
    // Select string formatting implementation.
    //
    // RTT printf formatting
    //  - Configurable stack usage. (SEGGER_RTT_PRINTF_BUFFER_SIZE in SEGGER_RTT_Conf.h)
    //  - No maximum string length.
    //  - Limited conversion specifiers and flags. (See SEGGER_RTT_printf.c)
    // Standard library printf formatting
    //  - Configurable formatting capabilities.
    //  - Full conversion specifier and flag support.
    //  - Maximum string length has to be known or (slightly) slower character-wise output.
    // 
    // #define PRINTF_USE_SEGGER_RTT_FORMATTING    0 // Use standard library formatting
    // #define PRINTF_USE_SEGGER_RTT_FORMATTING    1 // Use RTT formatting
    //
    #ifndef   PRINTF_USE_SEGGER_RTT_FORMATTING
      #define PRINTF_USE_SEGGER_RTT_FORMATTING    0
    #endif
    //
    // If using standard library formatting, 
    // select maximum output string buffer size or character-wise output.
    //
    // #define PRINTF_BUFFER_SIZE                  0 // Use character-wise output
    // #define PRINTF_BUFFER_SIZE                128 // Default maximum string length
    //
    #ifndef   PRINTF_BUFFER_SIZE
      #define PRINTF_BUFFER_SIZE                128
    #endif
    
    #if PRINTF_USE_SEGGER_RTT_FORMATTING  // Use SEGGER RTT formatting implementation
    /*********************************************************************
    *
    *       Function prototypes
    *
    **********************************************************************
    */
    int SEGGER_RTT_vprintf(unsigned BufferIndex, const char * sFormat, va_list * pParamList);
    
    /*********************************************************************
    *
    *       Global functions, printf
    *
    **********************************************************************
    */
    /********************************************************************* 
    *
    *       printf()
    *
    *  Function description
    *    print a formatted string using RTT and SEGGER RTT formatting.
    */
    int printf(const char *fmt,...) {
      int     n;
      va_list args;
      
      va_start (args, fmt);
      n = SEGGER_RTT_vprintf(0, fmt, &args);
      va_end(args);
      return n;
    }
    
    #elif PRINTF_BUFFER_SIZE == 0 // Use standard library formatting with character-wise output
    
    /*********************************************************************
    *
    *       Static functions
    *
    **********************************************************************
    */
    static int _putchar(int x, __printf_tag_ptr ctx) {
      (void)ctx;
      SEGGER_RTT_Write(0, (char *)&x, 1);
      return x;
    }
    
    /*********************************************************************
    *
    *       Global functions, printf
    *
    **********************************************************************
    */
    /********************************************************************* 
    *
    *       printf()
    *
    *  Function description
    *    print a formatted string character-wise, using RTT and standard 
    *    library formatting.
    */
    int printf(const char *fmt, ...) {
      int         n;
      va_list     args;
      __printf_t  iod;
      
      va_start(args, fmt);
      iod.string    = 0;
      iod.maxchars  = INT_MAX;
      iod.output_fn = _putchar;
      SEGGER_RTT_LOCK();
      n = __vfprintf(&iod, fmt, args);
      SEGGER_RTT_UNLOCK();
      va_end(args);
      return n;
    }
    
    #else // Use standard library formatting with static buffer
    
    /*********************************************************************
    *
    *       Global functions, printf
    *
    **********************************************************************
    */
    /********************************************************************* 
    *
    *       printf()
    *
    *  Function description
    *    print a formatted string using RTT and standard library formatting.
    */
    int printf(const char *fmt,...) {
      int     n;
      char    aBuffer[PRINTF_BUFFER_SIZE];
      va_list args;
      
      va_start (args, fmt);
      n = vsnprintf(aBuffer, sizeof(aBuffer), fmt, args);
      if (n > (int)sizeof(aBuffer)) {
        SEGGER_RTT_Write(0, aBuffer, sizeof(aBuffer));
      } else if (n > 0) {
        SEGGER_RTT_Write(0, aBuffer, n);
      }
      va_end(args);
      return n;
    }
    #endif
    
    /*********************************************************************
    *
    *       Global functions
    *
    **********************************************************************
    */
    /********************************************************************* 
    *
    *       puts()
    *
    *  Function description
    *    print a string using RTT.
    */
    int puts(const char *s) {
      return SEGGER_RTT_WriteString(0, s);
    }
    
    /********************************************************************* 
    *
    *       __putchar()
    *
    *  Function description
    *    Write one character via RTT.
    */
    int __putchar(int x, __printf_tag_ptr ctx) {
      (void)ctx;
      SEGGER_RTT_Write(0, (char *)&x, 1);
      return x;
    }
    
    /********************************************************************* 
    *
    *       __getchar()
    *
    *  Function description
    *    Wait for and get a character via RTT.
    */
    int __getchar() {
      return SEGGER_RTT_WaitKey();
    }
    
    #endif
    #endif
    #endif
    /****** End Of File *************************************************/
    

    Note that I only added line 68 and 265 in this file.

    Regarding 2:

    Does that also fail if you open the same project in the old version of SES, or only the new?

    BR,
    Edvin

  • Hi Edvin,

    I have tried by changing SEGGER_RTT_Syscalls_SES.c as like you given but the error remains same even after i clean and refresh the project

    regarding 2.

    in segger version 5.68 it works fine only for the new version of segger , facing these issues

  • Hi Edvin ,

    This is how i am getting in two different Segger version V5.68 and V6.30 for both nrf5 sdk 17.1.0 and thread v4.2.0

    1. ble_blink example nrf 5 SDK

    V5.68

    V6.30

    2. ble_uart_example nRF5SDK

    v5.68

    V6.30

    note: for uart example code the error is different and it is showing the retarget.c

    Regarding 2.

    nRF Thread 4.2.0

    simple_coap_client example

    V5.68

    V6.30

  • Hello,

    Please try to contact Segger and ask them why the #if is not working, as this information is directly from them:

    https://wiki.segger.com/Embedded_Studio_Library_IO

    We only officially support the Segger Embedded Version studio up until the one mentioned in the release notes from that specific SDK, which is SES 4.12 in this case. 

    BR,

    Edvin

  • Did you got no error while adding #if !defined(__SEGGER_RTL_VERSION)
    in SEGGER_RTT_Syscalls_SES.c?

Reply Children
  • I don't have Segger embedded studio v6.30 installed, because it is not a Segger Embedded Studio version that is supported in any of our SDKs.

    If there was something that I could do to figure it out, I would have checked it out. You can exclude the file that includes the __vfprintf.h, and your project will compile, but if you want to use the macro that checks what version you have, we didn't make that, and I don't know how it works, and also I don't have anyone in Nordic that I can check with, because we didn't make it. So I think it is easier if you contact Segger and ask them why it is not working.

    Best regards,

    Edvin

  • Hi Edvin,

    I've been watching this thread because I have the same problem with SES 6.30. I did manage to figure out that the project has to be explicitly configured to use RTT. Project Options > Library > Debug I/O > RTT. This is a new drop down option.

    I also got a " TLS sections are not adjacent" linker error and this is where I threw in the towel. TLS = Thread Local Storage?

    Best regards,

    Pieter

    P.S. The SES license expires and it "forces" one to install the latest version. After renewing the license with the latest version then it is possible to run the old version again. This makes it tough to keep a stable code base supported.

  • I just installed a license on version 5.34, and that worked just fine.

    Without having tested myself, I think having several versions of SES may confuse the compiler. Files, such as the thumb_crt0s have a tendency to be picked from the wrong version. I don't have enough knowledge on how this works to say how to change it or what this file does, but I suspect Segger will be able to give a better answer, and perhaps they know why the __SEGGER_RTL_VERSION doesn't work, and perhaps they have another that is working.

    BR,

    Edvin

  • I also see a problem with the bootloader on V6.30 (built from secure_bootloader_ble_s140_pca10100 SDK17.1). It compiles but doesn't work (some error causes the device to reset).

    I rolled back to Segger v5.66, cleaned and rebuilt the project and it works.

  • Thank you for the information. 

    As stated in the release notes, the older Segger version is the one that is tested for the SDK. Although I am not sure what the changes may be, I would check the included libraries. It happens that some IDEs change the sizes of default parameters, which causes the prebuilt libraries to fault. Did the log say anything about why it crashed? (you probably need to build the _debug bootloader project). 

    Best regards,

    Edvin

Related