Skip to content
GitLab
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • A ArduinoJson
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 24
    • Issues 24
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Benoît Blanchon
  • ArduinoJson
  • Issues
  • #1601
Closed
Open
Issue created Jun 29, 2021 by Administrator@rootContributor

Storing positive value from an int can't be read into an unsigned int

Created by: embedded-creations

If I store a positive signed value (e.g. top["testInt"] = (int)43;) I can't read the same value out into an unsigned variable (unsigned int tempUInt = top["testInt"];), I just get 0.

This is probably an odd use case but I do have a good reason for doing this in some software where user extendable code is communicating with the main library code only through an ArduinoJson document.

This simple example shows the problem:

#include <ArduinoJson.h>

void setup() {
  Serial.begin(9600);
  while (!Serial);
  delay(1000);

  StaticJsonDocument<32> top;

  top["testInt"] = (int)43;
  int tempInt = top["testInt"];
  unsigned int tempUInt = top["testInt"];
  //top["testUInt"] = (unsigned int)43;

  Serial.print("tempInt = top[\"testInt\"]: ");
  Serial.println(tempInt);
  Serial.print("tempUInt = top[\"testInt\"]: ");
  Serial.println(tempUInt);

  Serial.print("top[\"testInt\"].is<int>(): ");
  Serial.println(top["testInt"].is<int>());
  Serial.print("top[\"testInt\"].is<unsigned int>(): ");
  Serial.println(top["testInt"].is<unsigned int>());
}

void loop() {

}

Result:

tempInt = top["testInt"]: 43
tempUInt = top["testInt"]: 0
top["testInt"].is<int>(): 1
top["testInt"].is<unsigned int>(): 0

Tested on Teensy 3.6 and ESP32. Compiler output from Teensy 3.6:

/Applications/Teensyduino.app/Contents/Java/arduino-builder -dump-prefs -logger=machine -hardware /Applications/Teensyduino.app/Contents/Java/hardware -hardware /Users/louis/Library/Arduino15/packages -tools /Applications/Teensyduino.app/Contents/Java/tools-builder -tools /Applications/Teensyduino.app/Contents/Java/hardware/tools/avr -tools /Users/louis/Library/Arduino15/packages -built-in-libraries /Applications/Teensyduino.app/Contents/Java/libraries -libraries /Users/louis/Dropbox/Dev/Arduino/libraries -fqbn=teensy:avr:teensy36:usb=serial,speed=180,opt=o2std,keys=en-us -ide-version=10813 -build-path /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 -warnings=all -build-cache /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_cache_65962 -verbose /Users/louis/Dropbox/Dev/Arduino/ArduinoJson_intToUintConversionTest/ArduinoJson_intToUintConversionTest.ino
/Applications/Teensyduino.app/Contents/Java/arduino-builder -compile -logger=machine -hardware /Applications/Teensyduino.app/Contents/Java/hardware -hardware /Users/louis/Library/Arduino15/packages -tools /Applications/Teensyduino.app/Contents/Java/tools-builder -tools /Applications/Teensyduino.app/Contents/Java/hardware/tools/avr -tools /Users/louis/Library/Arduino15/packages -built-in-libraries /Applications/Teensyduino.app/Contents/Java/libraries -libraries /Users/louis/Dropbox/Dev/Arduino/libraries -fqbn=teensy:avr:teensy36:usb=serial,speed=180,opt=o2std,keys=en-us -ide-version=10813 -build-path /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 -warnings=all -build-cache /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_cache_65962 -verbose /Users/louis/Dropbox/Dev/Arduino/ArduinoJson_intToUintConversionTest/ArduinoJson_intToUintConversionTest.ino
Using board 'teensy36' from platform in folder: /Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr
Using core 'teensy3' from platform in folder: /Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr
Detecting libraries used...
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -D__MK66FX1M0__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY36 -DF_CPU=180000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
Alternatives for ArduinoJson.h: [ArduinoJson@6.18.0]
ResolveLibrary(ArduinoJson.h)
  -> candidates: [ArduinoJson@6.18.0]
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -D__MK66FX1M0__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY36 -DF_CPU=180000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 -I/Users/louis/Dropbox/Dev/Arduino/libraries/ArduinoJson/src /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp -o /dev/null -DARDUINO_LIB_DISCOVERY_PHASE
Generating function prototypes...
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -E -CC -x c++ -w -g -Wall -ffunction-sections -fdata-sections -nostdlib -fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -D__MK66FX1M0__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY36 -DF_CPU=180000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 -I/Users/louis/Dropbox/Dev/Arduino/libraries/ArduinoJson/src /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp -o /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/preproc/ctags_target_for_gcc_minus_e.cpp -DARDUINO_LIB_DISCOVERY_PHASE
/Applications/Teensyduino.app/Contents/Java/tools-builder/ctags/5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/preproc/ctags_target_for_gcc_minus_e.cpp
Compiling sketch...
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/precompile_helper /Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 /Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -x c++-header -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -D__MK66FX1M0__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY36 -DF_CPU=180000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/pch/Arduino.h -o /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/pch/Arduino.h.gch
Using previously compiled file: /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/pch/Arduino.h.gch
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-g++ -c -O2 -g -Wall -ffunction-sections -fdata-sections -nostdlib -MMD -fno-exceptions -fpermissive -felide-constructors -std=gnu++14 -Wno-error=narrowing -fno-rtti -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -D__MK66FX1M0__ -DTEENSYDUINO=153 -DARDUINO=10813 -DARDUINO_TEENSY36 -DF_CPU=180000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I/var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/pch -I/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3 -I/Users/louis/Dropbox/Dev/Arduino/libraries/ArduinoJson/src /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp -o /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp.o
Compiling libraries...
Compiling library "ArduinoJson"
Compiling core...
Using precompiled core: /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_cache_65962/core/core_6a8e06dec8be36068a20aa0373a23a9d.a
Linking everything together...
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-gcc -O2 -Wl,--gc-sections,--relax,--defsym=__rtc_localtime=1625012740 -T/Applications/Teensyduino.app/Contents/Java/hardware/teensy/avr/cores/teensy3/mk66fx1m0.ld -mthumb -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -fsingle-precision-constant -o /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/sketch/ArduinoJson_intToUintConversionTest.ino.cpp.o /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/../arduino_cache_65962/core/core_6a8e06dec8be36068a20aa0373a23a9d.a -L/var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 -larm_cortexM4lf_math -lm -lstdc++
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.eep
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-objcopy -O ihex -R .eeprom /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.hex
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/stdout_redirect /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.lst /Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-objdump -d -S -C /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/stdout_redirect /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.sym /Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-objdump -t -C /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/teensy_post_compile -file=ArduinoJson_intToUintConversionTest.ino -path=/var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 -tools=/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/ -board=TEENSY36
Using library ArduinoJson at version 6.18.0 in folder: /Users/louis/Dropbox/Dev/Arduino/libraries/ArduinoJson 
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/arm/bin/arm-none-eabi-size -A /var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691/ArduinoJson_intToUintConversionTest.ino.elf
Sketch uses 13324 bytes (1%) of program storage space. Maximum is 1048576 bytes.
Global variables use 4196 bytes (1%) of dynamic memory, leaving 257948 bytes for local variables. Maximum is 262144 bytes.
/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools/teensy_post_compile -file=ArduinoJson_intToUintConversionTest.ino -path=/var/folders/n6/l3jqlyms0r37qb1s_swjcqf00000gn/T/arduino_build_327691 -tools=/Applications/Teensyduino.app/Contents/Java/hardware/teensy/../tools -board=TEENSY36 -reboot -port=usb:14232140 -portlabel=[no_device] Serial -portprotocol=Teensy 
Assignee
Assign to
Time tracking