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