fixed_string für Microcontroller C++: Kleine String-Klasse ohne dynamische Speicherverwaltung

In Embedded-Projekten ist dynamische Speicherverwaltung oft unerwünscht. Speicherverbrauch soll vorhersehbar bleiben, Laufzeitverhalten soll deterministisch sein und kleine Hilfsklassen sollen möglichst einfach überprüfbar bleiben.

Für diesen Anwendungsfall habe ich ein kleines C++-Projekt auf GitHub veröffentlicht: fixed-string-embedded-cpp.

Worum geht es?

Das Projekt stellt den Typ mne::embedded::fixed_string<N> bereit. Dabei handelt es sich um eine kleine String-Klasse mit fester Kapazität, die zur Compile-Zeit festgelegt wird.

Intern werden die Zeichen in einem statisch dimensionierten Puffer gespeichert. Dadurch vermeidet das String-Objekt selbst dynamische Speicherallokation. Das ist besonders für Mikrocontroller-Anwendungen interessant, bei denen Speicherverbrauch und Laufzeitverhalten klar begrenzt sein sollen.

Typische Einsatzfälle

Geeignet ist fixed_string<N> zum Beispiel für Statusmeldungen, Protokollfelder, kurze Diagnoseausgaben, Labels, Namen oder Konfigurationswerte mit bekannter Maximallänge.

Beispiel

#include "mne/embedded/fixed_string.hpp"

#include <string_view>

void consume(std::string_view text);

int main()
{
    mne::embedded::fixed_string<32> message {};

    const auto result = message.assign("Hello embedded C++");

    if (result == mne::embedded::FixedStringError::none)
    {
        consume(message);
    }
}

Eigenschaften

Die Klasse bietet eine feste maximale Kapazität zur Compile-Zeit, einen nullterminierten Zeichenpuffer, Zuweisung aus std::string_view, Konvertierung nach std::string_view sowie einfache Methoden wie c_str(), data(), size(), empty(), capacity() und clear().

Projektstatus

Das Repository ist eine erste öffentliche Auskopplung aus einem privaten Embedded-C++-Framework. Der Header ist als Startpunkt nutzbar, das Projekt ist aber noch jung. Unit-Tests, CI-Unterstützung und weitere Beispiele sollen schrittweise ergänzt werden.

Quellcode auf GitHub: https://github.com/embmike/fixed-string-embedded-cpp