{"id":505,"date":"2026-05-25T10:15:26","date_gmt":"2026-05-25T10:15:26","guid":{"rendered":"https:\/\/mike-netz.biz\/?p=505"},"modified":"2026-05-25T11:10:44","modified_gmt":"2026-05-25T11:10:44","slug":"fixed_string-fuer-microcontroller-c-kleine-string-klasse-ohne-dynamische-speicherverwaltung","status":"publish","type":"post","link":"https:\/\/mike-netz.biz\/?p=505","title":{"rendered":"fixed_string f\u00fcr Microcontroller C++: Kleine String-Klasse ohne dynamische Speicherverwaltung"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\" style=\"color:#000000;\">In Embedded-Projekten ist dynamische Speicherverwaltung oft unerw\u00fcnscht. Speicherverbrauch soll vorhersehbar bleiben, Laufzeitverhalten soll deterministisch sein und kleine Hilfsklassen sollen m\u00f6glichst einfach \u00fcberpr\u00fcfbar bleiben.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"color:#000000;\">F\u00fcr diesen Anwendungsfall habe ich ein kleines C++-Projekt auf GitHub ver\u00f6ffentlicht: <a href=\"https:\/\/github.com\/embmike\/fixed-string-embedded-cpp\">fixed-string-embedded-cpp<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Worum geht es?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"color:#000000;\">Das Projekt stellt den Typ <strong><code>mne::embedded::fixed_string&lt;N&gt;<\/code><\/strong> bereit. Dabei handelt es sich um eine kleine String-Klasse mit fester Kapazit\u00e4t, die zur Compile-Zeit festgelegt wird.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"color:#000000;\">Intern werden die Zeichen in einem statisch dimensionierten Puffer gespeichert. Dadurch vermeidet das String-Objekt selbst dynamische Speicherallokation. Das ist besonders f\u00fcr Mikrocontroller-Anwendungen interessant, bei denen Speicherverbrauch und Laufzeitverhalten klar begrenzt sein sollen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Typische Einsatzf\u00e4lle<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\" style=\"color:#000000;\">Geeignet ist <strong><code>fixed_string&lt;N&gt;<\/code><\/strong> zum Beispiel f\u00fcr Statusmeldungen, Protokollfelder, kurze Diagnoseausgaben, Labels, Namen oder Konfigurationswerte mit bekannter Maximall\u00e4nge.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Beispiel<\/h2>\n\n\n\n<pre class=\"wp-block-code\" style=\"font-family:'Courier New', Courier, monospace; color:#000000;\"><code style=\"font-family:'Courier New', Courier, monospace;\">#include \"mne\/embedded\/fixed_string.hpp\"\n\n#include &lt;string_view&gt;\n\nvoid consume(std::string_view text);\n\nint main()\n{\n    mne::embedded::fixed_string&lt;32&gt; message {};\n\n    const auto result = message.assign(\"Hello embedded C++\");\n\n    if (result == mne::embedded::FixedStringError::none)\n    {\n        consume(message);\n    }\n}<\/code><\/pre>\n\n<!-- \/wp:post-content -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Eigenschaften<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p style=\"color:#000000;\">Die Klasse bietet eine feste maximale Kapazit\u00e4t zur Compile-Zeit, einen nullterminierten Zeichenpuffer, Zuweisung aus <strong><code>std::string_view<\/code><\/strong>, Konvertierung nach <strong><code>std::string_view<\/code><\/strong> sowie einfache Methoden wie <strong><code>c_str()<\/code><\/strong>, <strong><code>data()<\/code><\/strong>, <strong><code>size()<\/code><\/strong>, <strong><code>empty()<\/code><\/strong>, <strong><code>capacity()<\/code><\/strong> und <strong><code>clear()<\/code><\/strong>.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:heading -->\n<h2 class=\"wp-block-heading\">Projektstatus<\/h2>\n<!-- \/wp:heading -->\n\n<!-- wp:paragraph -->\n<p style=\"color:#000000;\">Das Repository ist eine erste \u00f6ffentliche Auskopplung aus einem privaten Embedded-C++-Framework. Der Header ist als Startpunkt nutzbar, das Projekt ist aber noch jung. Unit-Tests, CI-Unterst\u00fctzung und weitere Beispiele sollen schrittweise erg\u00e4nzt werden.<\/p>\n<!-- \/wp:paragraph -->\n\n<!-- wp:paragraph -->\n<p style=\"color:#000000;\">Quellcode auf GitHub: <a href=\"https:\/\/github.com\/embmike\/fixed-string-embedded-cpp\">https:\/\/github.com\/embmike\/fixed-string-embedded-cpp<\/a><\/p>\n<!-- \/wp:paragraph -->","protected":false},"excerpt":{"rendered":"<p>In Embedded-Projekten ist dynamische Speicherverwaltung oft unerw\u00fcnscht. Speicherverbrauch soll vorhersehbar bleiben, Laufzeitverhalten soll deterministisch sein und kleine Hilfsklassen sollen m\u00f6glichst einfach \u00fcberpr\u00fcfbar bleiben. F\u00fcr diesen Anwendungsfall habe ich ein kleines C++-Projekt auf GitHub ver\u00f6ffentlicht: fixed-string-embedded-cpp. Worum geht es? Das Projekt<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31],"tags":[34,27,25,33,32,21],"class_list":["post-505","post","type-post","status-publish","format-standard","hentry","category-software-entwicklung","tag-c-2","tag-c17","tag-embedded-software","tag-fixed_string","tag-github","tag-mikrocontroller"],"_links":{"self":[{"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/posts\/505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=505"}],"version-history":[{"count":15,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/posts\/505\/revisions"}],"predecessor-version":[{"id":527,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=\/wp\/v2\/posts\/505\/revisions\/527"}],"wp:attachment":[{"href":"https:\/\/mike-netz.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mike-netz.biz\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}