Ich bin neu in der Embedded C-Entwicklung und suche nach allgemeinen Prinzipien / Richtlinien für die Verwaltung der Größe des generierten Codes.
In meinem speziellen Beispiel verwende ich XC8 auf einem PIC18F4550. Mein Code belegt bisher etwa 13% des Speicherplatzes. Sobald ich "time.h" und 1/2 Funktionen davon benutze, springt die Nutzung auf 45%! Mir ist klar, dass der kostenlose XC8-Compiler nicht optimiert, aber ich bin trotzdem sehr überrascht zu sehen, wie viel Speicherplatz verwendet wird.
Was ich suche nach Tipps / Blickpunkten nach dem Vorbild von
- Alternativen zu den Standardbibliotheken, die in kleinen, zielgerichteten Teilmengen der Funktionalität implementiert werden. ZB eine Datums- / Zeitbibliothek. dh gibt es Repositionen, von denen ich nützliche Routinen erhalten kann?
- Wie man sieht, was den ganzen Raum nutzt. (Listing / Map-Dateien - und Tipps zu deren Analyse)
- Alle anderen Tipps / Ressourcen.
BEARBEITEN : Ich habe hier eine nette Implementierung ohne Verwendung von stdlib gefunden: /codereview/38275/convert-between-date-time-and-time-stamp-without-using-std-library-routines
Die allgemeine Frage bleibt jedoch bestehen. Gibt es Richtlinien, gute Repository-Quellen usw.
Antworten:
Hier sind einige Dinge, die ich bei der Verwendung des Microchips C18-Compilers getan habe. Möglicherweise gelten die Konzepte für Ihren Compiler: - Deklarieren Sie jede Zeichenfolge einmal. Fügen Sie eine separate .c-Datei ein und verwenden Sie eine .h-Datei, um auf sie zu verweisen. Mit anderen Worten, duplizieren Sie Anzeigemeldungen nicht mehrmals. - Zeichenfolgen so deklarieren, dass sie in Rom gehen. Dies hilft Ihnen nicht mit ROM (Code Space), spart aber Speicherplatz. - Schreiben Sie engen Code. Wenn mehrere Codezeilen dupliziert werden, fügen Sie sie in eine Funktion ein. Kopieren / Einfügen ist nicht erforderlich, ein eingebetteter Programmierer bester Freund. - Implementieren Sie, wie Sie bereits gedacht haben, Ihre eigenen Funktionen, anstatt eine Bibliothek einzuschließen. Ich habe einmal eine Menge Platz gespart, indem ich meine eigene itoa () -Funktion erstellt habe. Versuchen Sie, printf nicht zu verwenden.
quelle
Ich habe mich ein bisschen umgesehen und hier sind die Tipps, die ich finden kann
Dann gibt es einige Alternativen, die das Kernproblem der Codegröße nicht ansprechen, aber möglicherweise in Betracht gezogen werden müssen, wenn alles andere fehlschlägt
Ich möchte immer noch auf einfache Weise sehen, welche Funktionen und enthaltenen Funktionen den meisten Platz beanspruchen. Ich werde hier aktualisieren, wenn ich einen einfachen Weg dazu finde.
quelle
Das Implementieren einer eigenen Version von Standardfunktionen anstelle der gesamten Bibliothek kann hilfreich sein. Es gibt eine Million kleinerer, spezifischerer Optimierungen, die Sie vornehmen können, aber eine gute Referenzsammlung dieser Art von Tricks ist das Buch Hacker's Delight . Es ist sehr praktisch (besonders für ein bisschen Twiddling, wie Sie es oft auf einem Mikrocontroller tun) und ich empfehle es.
quelle