{"id":7688,"date":"2025-11-28T22:07:44","date_gmt":"2025-11-28T21:07:44","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=7688"},"modified":"2026-02-14T06:35:29","modified_gmt":"2026-02-14T05:35:29","slug":"what-will-become-of-my-code","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/was-wird-nur-aus-meinem-code\/","title":{"rendered":"What will become of my code?"},"content":{"rendered":"<h2>Software-Performance endlich fundiert bewerten<\/h2>\n<p>Autor: Daniel Penning, embeff GmbH<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2018<\/h3>\n<p><strong>Die Performance von Software spielt bei nahezu jedem Embedded-Projekt eine entscheidende Rolle. Schneller Code f\u00fchrt zu besseren Reaktionsraten und h\u00f6herem Systemdurchsatz. Eine spezifizierte Aufgabenstellung kann so gegebenenfalls mit weniger Leistung und dementsprechend kleinerem Mikrocontroller bew\u00e4ltigt werden. Der Energiebedarf sinkt und f\u00fchrt so insbesondere bei batteriebetriebenen Systemen zu l\u00e4ngerer Laufzeit bzw. einer geringeren Dimensionierung der Batteriekapazit\u00e4t. Diese Effekte resultieren schlussendlich in einer g\u00fcnstigeren Hardware.<\/strong><\/p>\n<p>Im Kontext dieser positiven Wirkungskette erstaunt es, dass bei vielen Projekten dem Zusammenhang zwischen einzelnen Softwareteilen und der resultierenden Performance wenig Beachtung geschenkt wird. Hochoptimierende Compiler und innovative Prozessor-Instruktionen bieten inzwischen ein enormes Potential, performanten Code zu schreiben.<\/p>\n<p>Dennoch werden im Embedded Umfeld viele Diskussionen von Pauschalisierungen und Vorurteilen gepr\u00e4gt. Abbildung 1 zeigt exemplarisch Techniken, gegen die oft im Namen der Performance Bedenken erhoben werden.<\/p>\n<table class=\"Gitternetztabelle1hell1\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"280\"><strong>Technik<\/strong><\/td>\n<td valign=\"top\" width=\"286\"><strong>Ungenutzte positive Effekte<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"280\">Konsequente Kapselung in neue Typen &amp; Module (Abstraktion)<\/td>\n<td valign=\"top\" width=\"286\">Wiederverwendbarkeit, Wartbarkeit<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"280\">Einsatz externer Bibliotheken<\/td>\n<td valign=\"top\" width=\"286\">Weniger Fehler durch erprobte Implementierungen, reduzierte Time-2-Market, h\u00f6here Performance<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"280\">Moderne C++ Sprachfeatures<\/td>\n<td valign=\"top\" width=\"286\">Wiederverwendbarkeit, Fehler bereits w\u00e4hrend der Implementierung finden, h\u00f6here Performance<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 1: Techniken des modernen Software-Engineerings<\/em><\/p>\n<p>Die grundlegende Ablehnung dieser Techniken verhindert eine Innovation im Embedded Software Engineering, die f\u00fcr die stetig komplexer werdenden Aufgaben zwingend erforderlich ist.<\/p>\n<h2>Performance-Bewertung f\u00fcr Embedded<\/h2>\n<p>Eine Performance-Bewertung f\u00fcr Embedded-Code erweist sich aus diversen Gr\u00fcnden als schwierig:<\/p>\n<ul>\n<li>Es gibt sehr verschiedene Ziel-Architekturen mit deutlich unterschiedlichem Laufzeitverhalten.<\/li>\n<li>Profiling ist oft nur mit teuren Tools und einer speziellen Hardware m\u00f6glich.<\/li>\n<li>Das Einrichten einer Profiling-f\u00e4higen Umgebung kann komplex sein.<\/li>\n<li>Die Ziel-Hardware muss Features zur Performance-Bewertung aufweisen.<\/li>\n<\/ul>\n<p>Im Folgenden soll gezeigt werden, wie eine Performance-Bewertung mit einfachen Mitteln exemplarisch realisiert werden kann.<\/p>\n<h2>Performance-Bewertung f\u00fcr ARM Cortex-M4<\/h2>\n<p>Mikrocontroller der ARM Cortex-M4 Reihe sind von verschiedensten Herstellern lizensiert und vielseitig einsetzbar. Die zugrunde liegende armv7m-Architektur [1] soll daher hier als Ausgangspunkt f\u00fcr eine Betrachtung dienen.<\/p>\n<p>In diesen Prozessoren kann optional eine &#8222;Data Watchpoint and Trace Unit&#8220; (DWT) [2] vom Hersteller vorgesehen werden. In den allermeisten Modellen ist dies der Fall. Die DWT unterst\u00fctzt das Auslesen von Performance-Registern.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"284\"><strong>CMSIS Register<\/strong><\/td>\n<td valign=\"top\" width=\"282\"><strong>Beschreibung<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_CYCCNT<\/td>\n<td valign=\"top\" width=\"282\">Cycle Count Register<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_CPICNT<\/td>\n<td valign=\"top\" width=\"282\">CPI Count Register<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_EXCCNT<\/td>\n<td valign=\"top\" width=\"282\">Exception Overhead Count Register<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_SLEEPCNT<\/td>\n<td valign=\"top\" width=\"282\">Sleep Count Register<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_LSUCNT<\/td>\n<td valign=\"top\" width=\"282\">LSU Count Register<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"284\">DWT_FOLDCNT<\/td>\n<td valign=\"top\" width=\"282\">Folded-instruction Count Register<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 2: ARM DWT Register<\/em><\/p>\n<p>F\u00fcr eine Performance-Messung einzelner Code-Teile kann das DWT_CYCCNT Register benutzt werden. Dieses Register z\u00e4hlt taktgenau die Zyklen. Es stellt damit die genaueste Einheit dar, die prinzipiell auf einem Prozessor gemessen werden kann. Durch die bei Embedded-MCUs \u00fcbliche feste Taktfrequenz kann bei Bedarf aus einer Anzahl Zyklen auf die absolute Zeit zur\u00fcckgerechnet werden.<\/p>\n<p>In Pseudocode gestaltet sich eine Messung also wie folgt:<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"547\"><span class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 preCycleCount = DWT-&gt;CYCCNT<\/span><\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 CodeUnderTest(&lt;Parameter&gt;); \/\/ Laufzeit messen<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 postCycleCount = DWT-&gt;CYCCNT<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0 cyclesUsed = postCycleCount \u2013 preCycleCount<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 3: Pseudocode zur Laufzeit-Messung<\/em><\/p>\n<p>So k\u00f6nnte man zur Laufzeit im Debugger die cyclesUsed Variable auslesen und h\u00e4tte das gew\u00fcnscht Ergebnis. Dabei gibt es jedoch zwei Probleme:<\/p>\n<ul>\n<li>Bei eingeschalteter Optimierung sortiert der Compiler ggf. Lese-Zugriffe auf das DWT_CYCCNT Register um.<\/li>\n<li>Auf Assembly-Ebene verf\u00e4lschen die Load\/Store Anweisungen aus dem DWT_CYCCNT Register in ein internes Prozessor-Register die Messergebnisse.<\/li>\n<\/ul>\n<p>Ein besserer Weg ist daher die Verwendung einer speziellen HALT-Instruktion, die den Prozessor direkt vor und nach Ausf\u00fchrung der Messung ohne Seiteneffekte anh\u00e4lt. In armv7m gibt es dazu die BKPT-Instruktion. Zu diesem Zeitpunkt kann bspw. per SWD-Schnittstelle [3] \u00fcber eine Debug-Probe das DWT_CYCCNT Register ausgelesen werden. Der Pseudocode reduziert sich damit auf:<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"547\">\n<p class=\"quellcode\">BKPT \/\/&lt; Extern CYCCNT lesen<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CodeUnderTest(&lt;Parameter&gt;)<\/p>\n<p class=\"quellcode\">\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 BKPT \/\/&lt; Extern CYCCNT lesen<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 4: Verbesserter Pseudocode zur Laufzeit-Messung<\/em><\/p>\n<p>Mit dieser Variante k\u00f6nnen f\u00fcr beliebige Programmteile Zyklus-genaue Laufzeiten bestimmt werden. Bei 100MHz Taktfrequenz liegt die zeitliche Aufl\u00f6sung beispielsweise bei beachtlichen 10ns.<\/p>\n<h2>Compiler-Optimierungen und Performance-Messungen<\/h2>\n<p>Der Compiler f\u00fchrt bei eingeschalteter Optimierung Ma\u00dfnahmen zur Performance-Verbesserung des Codes durch. Eine der wirkungsvollsten Techniken ist dabei, Verzweigungen in kurze Funktionen mit dem eigentlichen Funktionsinhalt zu ersetzen. Dies wird als Inlining bezeichnet. Weiterhin wird der Compiler versuchen, m\u00f6glichst viele Werte bereits selbst \u2013 w\u00e4hrend der Kompilierung &#8211; zu berechnen.<\/p>\n<p>So kann es leicht passieren, dass der Compiler einen zu messenden Funktionsaufruf selbst v\u00f6llig herausoptimiert.<\/p>\n<p>Der generelle Verzicht auf Optimierung ist keine L\u00f6sung, da gerade diese Ma\u00dfnahmen einen Gro\u00dfteil zur Gesamtperformance beitragen. Es gibt verschiedene Wege solche Optimierungen nur lokal gezielt zu unterbinden. Die Dokumentation der Google Benchmark Bibliothek [4] zeigt dazu interessante M\u00f6glichkeiten auf.<\/p>\n<h2>Beispiel: FPU gegen Soft-FPU<\/h2>\n<p>Ein einfaches Beispiel soll zeigen, wie mit dem oben vorgestellten Ansatz grundlegend Performance auf einem sehr feinen Level evaluiert werden kann. Dazu soll die Laufzeit einer einzelnen Funktion gemessen werden.<\/p>\n<p>Die zu testende Funktion (Function Under Test, FUT) multipliziert lediglich einen ganzzahligen Eingangswert mit der Kreiszahl in einfacher Flie\u00dfkomma-Genauigkeit.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"547\"><span class=\"quellcode\">\u00a0\u00a0\u00a0 int fut(int input) {\u00a0<\/span><\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0\u00a0return input *\u00a03.14159265359f;<\/p>\n<p class=\"quellcode\">\u00a0\u00a0\u00a0 }<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 5: Funktion, deren Laufzeit gemessen werden soll<\/em><br \/>\nDie Beispiele wurden mit der arm-none-eabi-gcc Toolchain (Version 7-2017-q4-major) und eingeschalteter Optimierung (O2) auf einem STM32F4 ausgef\u00fchrt.<\/p>\n<p>Der verwendete Mikrocontroller hat eine eingebaute FPU f\u00fcr Flie\u00dfkommazahlen. Wird diese per Compiler-Option abgeschaltet, muss die Multiplikation in Software nachgebildet werden.<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"349\"><strong>Mit FPU<\/strong><\/td>\n<td valign=\"top\" width=\"198\"><strong>Ohne FPU (Soft-FPU)<\/strong><\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"349\">fut(int):\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # Zyklen<\/p>\n<p>vmov s15,\u00a0r0@int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # 1<\/p>\n<p>vldr.32 s14,\u00a0.L3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # 2<\/p>\n<p>vcvt.f32.s32 s15,\u00a0s15\u00a0\u00a0\u00a0 # 1<\/p>\n<p>vmul.f32 s15,\u00a0s15,\u00a0s14\u00a0\u00a0 # 1<\/p>\n<p>vcvt.s32.f32 s15,\u00a0s15\u00a0\u00a0\u00a0 # 1<\/p>\n<p>vmov r0,\u00a0s15@int\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # 1<\/p>\n<p>bx lr\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 # 2-4<\/p>\n<p>.L3:<\/p>\n<p>.word 1078530011<\/p>\n<p>&nbsp;<\/td>\n<td valign=\"top\" width=\"198\">fut(int):<\/p>\n<p>push {r3,\u00a0lr}<\/p>\n<p>bl __aeabi_i2f<\/p>\n<p>ldr r1,\u00a0.L4<\/p>\n<p>bl __aeabi_fmul<\/p>\n<p>bl __aeabi_f2iz<\/p>\n<p>pop{r3,\u00a0pc}<\/p>\n<p>.L4:<\/p>\n<p>.word1078530011<\/p>\n<p>&nbsp;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Abbildung 6: Assembly Listing f\u00fcr zu messende Funktion<\/em><\/p>\n<p>Abbildung 6 zeigt das Assembly Listing f\u00fcr beide Varianten. Man erkennt bereits, dass in der Soft-FPU-Variante Spr\u00fcnge in die FPU-Emulationen vorhanden sind. Diese Funktionen werden von der Toolchain in der Regel nur als kompilierter Objektcode ausgeliefert. Bei propriet\u00e4ren Compilern ist deren Implementierung also unbekannt und kann lediglich aus dem Assembly reverse-engineered werden. Insbesondere ist also nicht klar, ob diese Funktionen eine konstante Laufzeit aufweisen.<\/p>\n<p>Bei der FPU-Variante dagegen sind keine Spr\u00fcnge notwendig \u2013 alle Operationen k\u00f6nnen direkt von Instruktionen \u00fcbernommen werden. Hinter dem Assembly wurden hier die ben\u00f6tigten Zyklen pro Instruktion aus dem Reference Manual [5] entnommen und notiert. Lediglich bei der Branch-Instruktion sind die Zyklen nicht deterministisch (2-4), da je nach Alignment unterschiedlich viele Zyklen f\u00fcr einen Refill der Pipeline n\u00f6tig sind.<\/p>\n<p>Tats\u00e4chlich zeigt sich bei Messung der Laufzeiten (Abbildung 7, s.\u00a0<a title=\"Fachinfo_ESE_code_embeff_penning\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_code_embeff_penning.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>), dass die FPU-Variante eine konstante Laufzeit hat, die emulierte Variante dagegen variabel ist. Die 15 Zyklen ergeben sich aus den vorhergesagten 9-11 Zyklen plus wiederum 2-4 Zyklen, die f\u00fcr den Sprung in die Funktion selbst ben\u00f6tigt werden. Die Branch-Instruktion ben\u00f6tigt hier also gemessen jeweils 4 Zyklen.<\/p>\n<p>Bei kritischen Programmstellen ist es wichtig \u00fcber Laufzeit-variable Programmteile Kenntnis zu haben. In diesen F\u00e4llen muss f\u00fcr die Ermittlung der Worst-Case-Execution-Time (WCET) der l\u00e4ngst m\u00f6gliche Pfad ausgew\u00e4hlt werden. Eine einzelne Messung h\u00e4tte hier leicht zu plausibel erscheinenden, aber falschen Schl\u00fcssen gef\u00fchrt.<\/p>\n<h2>Zusammenfassung<\/h2>\n<p>Die vorgestellte Methodik eignet sich dazu, Funktionen und Code-Fragmente einer genauen Performance-Messung zu unterziehen. Die hochgenaue zeitliche Aufl\u00f6sung erlaubt Untersuchen f\u00fcr alle Einsatzzwecke, insbesondere auch kritischer Interrupt Service Routinen und Regelschleifen.<\/p>\n<p>Eine solche Methodik liefert die notwendige Grundlage, die in Tabelle 1 genannten Softwaretechniken im Einzelfall einer Bewertung zu unterziehen. Zyklen-genaue Ergebnisse erm\u00f6glichen eine fundierte Aussage \u00fcber die Anwendbarkeit von Sprachen, Bibliotheken und Designfeatures.\u00a0Wenn Kompromisse notwendig werden, k\u00f6nnen Entscheidungen auf Basis realer Daten erfolgen.<\/p>\n<p>Hinweis: Der Autor betreibt eine kostenfreie Web-Plattform zur komfortablen Performance-Auswertung kleiner Code-Fragmente [6].<\/p>\n<h2>Quellen<\/h2>\n<p>[1]\u00a0<a title=\"ARMv7-M Reference Manual\" href=\"https:\/\/static.docs.arm.com\/ddi0403\/eb\/DDI0403E_B_armv7m_arm.pdf\" target=\"_blank\" rel=\"noopener\">ARMv7-M Reference Manual<\/a><\/p>\n<p>[2]\u00a0<a title=\"Data Watchpoint and Trace Unit\" href=\"https:\/\/developer.arm.com\/docs\/ddi0439\/latest\/data-watchpoint-and-trace-unit\/dwt-programmers-model\" target=\"_blank\" rel=\"noopener\">Data Watchpoint and Trace Unit<\/a><\/p>\n<p>[3]\u00a0<a title=\"ARM Serial Wire Debug\" href=\"https:\/\/www.arm.com\/files\/pdf\/Serial_Wire_Debug.pdf\" target=\"_blank\" rel=\"noopener\">ARM Serial Wire Debug<\/a><\/p>\n<p>[4]\u00a0<a title=\"Google Benchmark Bibliothek\" href=\"https:\/\/github.com\/google\/benchmark\" target=\"_blank\" rel=\"noopener\">Google Benchmark Bibliothek<\/a><\/p>\n<p>[5]\u00a0<a title=\"Cortex-M4 Reference Manual\" href=\"https:\/\/infocenter.arm.com\/help\/topic\/com.arm.doc.100166_0001_00_en\/arm_cortexm4_processor_trm_100166_0001_00_en.pdf\" target=\"_blank\" rel=\"noopener\">Cortex-M4 Reference Manual<\/a><\/p>\n<p>[6]\u00a0<a title=\"Online-Plattform f\u00fcr MCU Performance-Messungen\" href=\"https:\/\/barebench.com\/\" target=\"_blank\" rel=\"noopener\">Online-Plattform f\u00fcr MCU Performance-Messungen<\/a><\/p>\n<h2>Autor<\/h2>\n<p>Daniel Penning studierte Elektrotechnik in Karlsruhe und ist Gesch\u00e4ftsf\u00fchrer der embeff GmbH. Er verf\u00fcgt \u00fcber mehr als 10 Jahre Erfahrung in verschiedenen Bereichen der Softwareentwicklung. Inzwischen konzentriert er sich ausschlie\u00dflich auf die speziellen Anforderungen eingebetteter Systeme. Dabei ist ihm besonders die Effizienz von Produkten und Entwicklungsprozessen eine Herzensangelegenheit.<\/p>\n<p><strong>Kontakt:\u00a0<\/strong>daniel.penning@embeff.com<\/p>\n<p><a title=\"Fachinfo_ESE_code_embeff_penning\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_code_embeff_penning.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF-Datei downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Echtzeit &#8211; MicroConsult Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"Alle Trainings und Termine\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Embedded- und Echtzeit-Softwareentwicklung.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Echtzeit &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema Embedded- und Echtzeit-Softwareentwicklung steht\u00a0<a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Embedded- und Echtzeit-Softwareentwicklung\" href=\"https:\/\/www.microconsult.de\/embedded-und-echtzeit-softwareentwicklung\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>\u00a0Fachwissen zu weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Fachinformationen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Software-Performance endlich fundiert bewerten Autor: Daniel Penning, embeff GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2018 Die Performance von Software spielt bei nahezu jedem Embedded-Projekt eine entscheidende Rolle. Schneller Code f\u00fchrt zu besseren Reaktionsraten und h\u00f6herem Systemdurchsatz. Eine spezifizierte Aufgabenstellung kann so gegebenenfalls mit weniger Leistung und dementsprechend kleinerem Mikrocontroller bew\u00e4ltigt werden. Der Energiebedarf sinkt [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-7688","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Was wird nur aus meinem Code? - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/what-will-become-of-my-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Was wird nur aus meinem Code? - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Software-Performance endlich fundiert bewerten Autor: Daniel Penning, embeff GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2018 Die Performance von Software spielt bei nahezu jedem Embedded-Projekt eine entscheidende Rolle. Schneller Code f\u00fchrt zu besseren Reaktionsraten und h\u00f6herem Systemdurchsatz. Eine spezifizierte Aufgabenstellung kann so gegebenenfalls mit weniger Leistung und dementsprechend kleinerem Mikrocontroller bew\u00e4ltigt werden. Der Energiebedarf sinkt [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/what-will-become-of-my-code\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-28T21:07:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-14T05:35:29+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Was wird nur aus meinem Code?\",\"datePublished\":\"2025-11-28T21:07:44+00:00\",\"dateModified\":\"2026-02-14T05:35:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/\"},\"wordCount\":1433,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/\",\"name\":\"Was wird nur aus meinem Code? - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-28T21:07:44+00:00\",\"dateModified\":\"2026-02-14T05:35:29+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/was-wird-nur-aus-meinem-code\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Was wird nur aus meinem Code?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"What will become of my code? - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/what-will-become-of-my-code\/","og_locale":"en_GB","og_type":"article","og_title":"Was wird nur aus meinem Code? - MicroConsult Academy GmbH","og_description":"Software-Performance endlich fundiert bewerten Autor: Daniel Penning, embeff GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2018 Die Performance von Software spielt bei nahezu jedem Embedded-Projekt eine entscheidende Rolle. Schneller Code f\u00fchrt zu besseren Reaktionsraten und h\u00f6herem Systemdurchsatz. Eine spezifizierte Aufgabenstellung kann so gegebenenfalls mit weniger Leistung und dementsprechend kleinerem Mikrocontroller bew\u00e4ltigt werden. Der Energiebedarf sinkt [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/what-will-become-of-my-code\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-28T21:07:44+00:00","article_modified_time":"2026-02-14T05:35:29+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Was wird nur aus meinem Code?","datePublished":"2025-11-28T21:07:44+00:00","dateModified":"2026-02-14T05:35:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/"},"wordCount":1433,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/","url":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/","name":"What will become of my code? - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-28T21:07:44+00:00","dateModified":"2026-02-14T05:35:29+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/was-wird-nur-aus-meinem-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Was wird nur aus meinem Code?"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=7688"}],"version-history":[{"count":4,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7688\/revisions"}],"predecessor-version":[{"id":11821,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/7688\/revisions\/11821"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=7688"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=7688"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=7688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}