Juhász, M. F. (2023). Modern C++ in embedded systems - Utilization of modern C++ language features for creating zero-overhead firmware architectures for resource-constrained embedded systems [Diploma Thesis, Technische Universität Wien]. reposiTUm. https://doi.org/10.34726/hss.2023.112580
Abstraktion ist ein zweischneidiges Schwert in Programmiersprachen. Einerseits vereinfacht sie die Verwaltung komplexer Systeme und ermöglicht es Entwicklern, komplizierte Details hinter intuitiven Schnittstellen zu kapseln. Andererseits herrscht seit langem die Auffassung, dass Abstraktion mit einem erhöhten Laufzeit-Overhead gleichzusetzen ist, was in ressourcenbeschränkten Umgebungen ein erhebliches Hindernis darstellen kann. Ein häufig anzutreffendes Missverständnis ist die Befürchtung, dass objektorientierte Sprachen zu einem höheren Laufzeit-Overhead führen, insbesondere in Umgebungen mit eingeschränkten Ressourcen. Dieser Glaube rührt von der Vorstellung her, dass Abstraktion, eine Schlüsselkomponente von OOP, unweigerlich zu Leistungseinbußen führt. Diese Befürchtung ist besonders in der Welt eingebetteter Systeme weit verbreitet, wo jedes Byte Speicher und jede Millisekunde Verarbeitungszeit von größter Bedeutung sind. Ziel dieser Diplomarbeit ist es, zu widerlegen, dass das Hinzufügen von Abstraktionsschichten unvermeidlich zu weniger effizienter Software führt. Diese Arbeit dient als Demonstration, wie moderne C++ Features es ermöglichen, Firmware zu schreiben, die die entsprechende C-Implementierung an Effizienz, Wartbarkeit und Lesbarkeit übertrifft. Im ersten Teil der Forschungsarbeit lag der Schwerpunkt darauf, wie moderne C++-Sprachfunktionen zur Optimierung von Code genutzt werden können, der häufig bei der Entwicklung eingebetteter Firmware verwendet wird. Es wird gezeigt, dass durch die Verwendung von C++ Teile der Firmware, die aufgrund des eingebetteten Charakters des Projekts von Natur aus konstant sind, zur Kompilierzeit ausgeführt werden können. Im zweiten Teil werden Abstraktionen, die in objektorientierten Programmiersprachen üblich sind, untersucht, ihre Auswirkungen auf die Laufzeitleistung analysiert und festgestellt, welche Abstraktionen ohne zusätzlichen Laufzeit-Overhead verwendet werden können. Es wurde festgestellt, dass viele dieser Abstraktionen keinen Overhead verursachen, mit Ausnahme derjenigen, die explizit für die Laufzeit konzipiert sind. Im letzten Teil wurden Messungen der Kompilierungs- und Laufzeit durchgeführt, um die Schlussfolgerungen aus der vorangegangenen detaillierten Analyse zu untermauern. Die Ergebnisse bestätigten die früheren Schlussfolgerungen und zeigten, dass C++ für die Implementierung eingebetteter Firmware verwendet werden kann, die ihrem C-Pendant überlegen ist.
de
Abstraction is a double-edged sword in programming languages. On one hand, it simplifies the management of complex systems, allowing developers to encapsulate intricate details behind intuitive interfaces. On the other hand, there is a longstanding perception that abstraction equates to increased runtime overhead, which can be a significant deterrent in resource-constrained environments. One common misconception often encountered is the fear that object-oriented languages lead to runtime overhead, particularly in resource-constrained environments. This belief stems from the idea that abstraction, a key component of OOP, invariably adds performance cost. This fear is especially prevalent in the world of embedded systems, where every byte of memory and every millisecond of processing time is of paramount importance. The aim of this thesis is to demolish the misconception that adding layers of abstraction inevitably results in less efficient software. This work serves as a demonstration of how modern C++ language features make it possible to write firmware that surpasses the equivalent C implementation in efficiency, maintainability and readability. In the first part of the research, the focus was on how modern C++ language features can be used to optimize code commonly used in embedded firmware development. It is shown that by using C++, parts of the firmware that are inherently constant due to the embedded nature of the project could be executed at compile time. In the second part, abstractions common to object-oriented programming languages are examined, analyzing their impact on runtime performance, and identifying which abstractions could be used without incurring additional runtime overhead. Many of these abstractions were found to be zero-cost, except for those explicitly designed for runtime. In the final part, measurements on compilation time and runtime were performed to substantiate the conclusions based on the previous detailed analysis. The findings supported the earlier conclusions, indicating that C++ can be used to implement embedded firmware that is superior to its C counterpart.