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

thingy91:nRF52840 int64_t convert the value to string in sprintf

thingy91:nRF52840 int64_t convert the value to string in sprintf

Add next line in proj.conf

CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_NANO=n

If you do the following:

int64_t xxx = 1609665300;
int8_t unix_time[256] = {'\0'};

sprintf(unix_time, "%"PRIu64" ", xxx);
printk("unix_time = %s\n",unix_time);
sprintf(unix_time, "%llu", xxx);
printk("unix_time = %s\n",unix_time);
sprintf(unix_time, "%lld", xxx);
printk("unix_time = %s\n",unix_time);

As a result

unix_time = lu
unix_time = lu
unix_time = ld

Is there a CONFIG that is not enough?

Parents Reply Children
  • What I want to do is a sprintf function unix_time expand the value of the int64_t to the string array.

    prj.conf:

    #
    # Copyright (c) 2019 Nordic Semiconductor
    #
    # SPDX-License-Identifier: LicenseRef-BSD-5-Clause-Nordic
    #

    CONFIG_BT=y
    CONFIG_BT_CENTRAL=y
    CONFIG_BT_PERIPHERAL=y
    CONFIG_BT_DEVICE_NAME="Nordic Discovery Sample"

    CONFIG_BT_SCAN=y
    CONFIG_BT_SCAN_FILTER_ENABLE=y
    CONFIG_BT_SCAN_UUID_CNT=1

    CONFIG_BT_SMP=y
    CONFIG_BT_GATT_CLIENT=y
    CONFIG_BT_GATT_DM=y
    CONFIG_HEAP_MEM_POOL_SIZE=2048

    # Needed to print UUID.
    CONFIG_BT_DEBUG_LOG=y
    #CONFIG_BT_GATT_DM_DATA_PRINT=y

    CONFIG_USE_SEGGER_RTT=y
    CONFIG_UART_CONSOLE=n
    CONFIG_RTT_CONSOLE=y
    CONFIG_LOG_PRINTK=y

    # Config logger
    CONFIG_LOG=y
    CONFIG_USE_SEGGER_RTT=y
    CONFIG_LOG_BACKEND_RTT=y
    CONFIG_LOG_BACKEND_UART=n

    CONFIG_BT_LL_SOFTDEVICE_DEFAULT=y
    CONFIG_BT_CTLR=y

    #CONFIG_BT_SETTINGS=y
    CONFIG_SETTINGS=y

    CONFIG_BT_OBSERVER=y
    CONFIG_BT_BACKGROUND_SCAN_INTERVAL=2048
    CONFIG_BT_BACKGROUND_SCAN_WINDOW=18

    CONFIG_FLASH=y
    CONFIG_FLASH_PAGE_LAYOUT=y
    CONFIG_NVS=y
    CONFIG_NVS_LOG_LEVEL_DBG=y
    CONFIG_REBOOT=y
    CONFIG_MPU_ALLOW_FLASH_WRITE=y

    CONFIG_NRFX_CLOCK=n

    # Enable the UART driver
    #CONFIG_UART_ASYNC_API=y
    #CONFIG_NRFX_UARTE0=y
    #CONFIG_NRFX_UARTE1=y
    #CONFIG_SERIAL=y
    #CONFIG_CONSOLE=y

    CONFIG_NEWLIB_LIBC=y
    CONFIG_NEWLIB_LIBC_NANO=n

    Thank you for your consideration.

  • Okay. When testing with your configuration I can still print the number successfully. How are you building the application? When using SES you may have to reload the project or if you're using the command line it can be a good idea to build with the "pristine" flag (-p).

    Could you also test the attached application?

    3157.zephyr.hex

    Thank you for the patience!

    Best regards,
    Carl Richard

  • There is no problem because it is relood in SES.

    I'm not trying the attached application.

    I didn't know what to do with SES.

    By the way, where is the source of sprintf?

    The source of minimal's library was:
    \ncs\v1.4.2\zephyr\lib\libc\minimal\source\stdout\sprintf.c

    When linking, liblib_libc_newlib.a is linked, but the included source is libc-hooks.c only.

  • Okay, so it's fixed now? If not please try the application I attached by flashing it to your device using the nRF Connect for Desktop programmer app. The application is just a small sample with the code from your ticket. 

    The source is located in the libc that you use, which in your case is newlib. You can find the source here

    Best regards,
    Carl Richard

  • After opening the nRF connection SDK project in SES, it worked fine.

    Thank you very much.

    RTT Viewer could not connect.

Related