Jede Funktion anstelle von sprintf() in C? code-Größe ist zu groß nach dem kompilieren
Arbeite ich an der Entwicklung eines embedded-Systems (Cortex M3). Für das senden von Daten aus dem Gerät an den seriellen port (um zu zeigen, auf einem PC-Bildschirm), ich benutze einige eigene Funktionen, die mit putchar () - Methode.
Wenn ich senden möchten integer oder float, verwende ich sprintf (), um Sie zu konvertieren Zeichenfolge und sendet Sie an den seriellen port.
Nun, Sie problem ist, dass ich mit Keil uVision IDE und es ist eine eingeschränkte version mit max 32 KB.
Immer wenn ich call sprintf() in verschiedenen Funktionen, ich weiß nicht, warum die Größe der code nach dem kompilieren zu stark erhöht.
Ich habe übertroffen 32 KB jetzt und ich Frage mich, habe ich einige meiner Funktionen und verwenden Sie etwas anderes anstelle von sprintf!
Keine Ahnung?
- Versuchen Sie zu vermeiden
float
s, nachdem alle, als Ihre runtime-library-Komponenten sind ziemlich groß und langsam, in den meisten Fällen. - der printf-Familie ist sehr kostenintensiv, da die große Menge an code benötigt, um es zu implementieren, esp floating point. Ein integer nur printf ist eine ganze Menge kleiner, aber immer noch teuer. Tun Sie Sie wirklich denken, Sie brauchen, printf() in der embedded-microcontroller-code? Realisieren Sie Ihr eigenes viel billigere Lösungen.
- Auch mit Blick auf Ihre compiler-Hersteller Bibliotheken zur Verfügung. Oft gibt es mehrere Geschmack des C std libs mit Funktionalität reduziert. Zum Beispiel, ein sprintf, mit int und float, aber keine wissenschaftliche notation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zwei mögliche Angebote (von denen keines habe ich mich eingesetzt - meine compiler-Hersteller liefern normalerweise eine abgespeckte
printf
für den embedded-Einsatz):http://eprintf.sourceforge.net/ - [Sep 2017: leider scheint verschwunden, aber der Quellcode noch hier: https://sourceforge.net/projects/eprintf/files/ ]
http://www.sparetimelabs.com/tinyprintf/index.html - 2-Dateien, die über 1,4 KB code. Option zum aktivieren von 'Long' (bedeutet mehr code-Größe). Unterstützt von führenden Nullen und Feldbreite. Keine floating-point-Unterstützung.
eprintf
Seite hat keine links zu den eigentlichen code, hier ist ein link zu der sourceforge eprintf Projekt: sourceforge.net/projects/eprintfWenn Sie wollen, dass es effizient sein, die beste Möglichkeit ist wahrscheinlich, um code es selbst, oder finden Sie einige bereits code geschrieben, der für es auf dem Netz. Int zu string-Konvertierung ist jedoch sehr einfach, jeder Programmierer kann schreiben, dass in weniger als 30 Minuten. Float-zu-string-Konvertierung ist ein bisschen komplizierter und hängt von der floating-point-format verwendet.
Für die Bequemlichkeit, hier ist ein einfaches int-zu-string-Algorithmus für die Verwendung in mikrocontroller-Anwendungen:
Können Sie versuchen
itoa()
oderftoa()
und implementieren Sie diese als Ihre Anforderung.Ich meine, wie Sie wandeln diese Zeichen nur innerhalb der definition selbstputchar()
direkt drucken.Dies sollte funktionieren , denke ich.