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

  • 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

  • Yes Edvin, I also mention here that only Ble SDK is working fine with that method not the THREAD SDK

    example of thread protocol is not working by removing the SEGGER_RTT_Syscalls_SES  in project file

  • 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

Related