Hallo zusammen, das von mir für die Anpassung alter AVR-Projekte bevorzugte Atmel Studio 7 nutzt standardmäßig den AVR-GCC 4.8.1. Damals habe ich eine Funktion für wasnprintf_P geschrieben, die die gleiche Signatur wie die eingebaute Funktion snprintf_P hat, um einen Fehler zu umgehen. Anschließend wurde jeder Aufruf von snprintf_P in der Entwicklungsumgebung gesucht und durch wasnprintf_P ersetzt. Sprung in die Gegenwart: Compiler und Entwicklungsumgebung sind gleich geblieben. Allerdings erscheint mir die damalige Vorgehensweise ("aufpassen, dass ich statt Funktion A immer Funktion B verwende") mittlerweile ziemlich umständlich und fehlerträchtig. Gibt es einen weniger fehlerträchtigen Weg, statt einer Library-Funktion eine eigene Funktion mit der gleichen Signatur zu verwenden? Viele Grüße W.T.
Ja das sollte mit dem Linker Flag "wrap" gehen. Alternativ Quick and Dirty mit einem Makro. Selber aber noch nie gemacht. Bei einer schnellen Suche das hier dazu gefunden: https://stackoverflow.com/a/617606
Wenn das Library anständig aufgebaut ist, befindet sich die Funktion wasnprintf_P in einer eigenen Datei (innerhalb des Libraries). Dann reicht es, deine eigene Version einfach explizit mitzulinken - die aus dem Library wird dann nicht genommen.
foobar schrieb: > Wenn das Library anständig aufgebaut ist, befindet sich die Funktion > wasnprintf_P in einer eigenen Datei (innerhalb des Libraries). Ich gehe davon aus, dass die snprintf_P, die durch die Funktion, die momentan wasnprintf_P heisst, ersetzt werden soll, Teil der libm.a ist.
Walter T. schrieb: > Ich gehe davon aus, dass die snprintf_P, die durch die Funktion, die > momentan wasnprintf_P heisst, ersetzt werden soll, Teil der libm.a ist. Eher in der libc.a.
Zuerst werden die Projektlibs gelinkt und als letztes die Standardlibs. Ich hab so z.B. beim WINAVR die 64-Bit Funktionen ersetzt, da die sehr ineffizient waren (~5kB Flash).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.