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 Reply Children
  • 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?

Related