Beheben: mbed printf() ignoriert Dezimalstellen in PlatformIO

English Deutsch

Problem:

Sie verwenden Code wie

example.cpp
printf("%.2f\n", myFloat);

in Ihrer mbed/PlatformIO-Anwendung, aber anstatt myFloat mit 2 Dezimalstellen auszugeben, wird es immer mit 6 Dezimalstellen ausgegeben (wie 0.000000).

Lösung

mbed verwendet standardmäßig die minimal-printf-Bibliothek, die so konfiguriert ist, dass sie Platz auf dem Mikrocontroller spart. Daher ist die Unterstützung für maximale Dezimalstellen bei Floats standardmäßig deaktiviert. Um alle printf-Funktionen auf Kosten von mehr Flash-Verbrauch und viel langsamerer Ausführung zu erhalten, fügen Sie mbed_app.json im Stammverzeichnis des PlatformIO-Projekts mit "target.printf_lib": "std" hinzu:

mbed_app.json
{
    "target_overrides": {
      "*": {
        "target.printf_lib": "std"
      }
    }
}

Siehe die Seite Plattform-Konfigurationsoptionen für weitere Details und ähnliche Optionen.


Check out similar posts by category: C/C++, Mbed, PlatformIO