Hallo, aus der Dokumentation der ARM C Libraries geht nicht eindeutig hervor, ob sprintf thread-safe ist oder nicht: spintf, sscanf, ... : When using these functions, the string-based functions read the locale settings. TYPICALLY, they are thread-safe. However, if you change locale in mid-session, you must ensure that these functions are not affected. The string-based functions, such as sprintf() and sscanf(), do not depend on the stdio library. Implementierung in meinem Projekt: - Cortex M3, STM32F105.. - Call von sprintf in main - Call von sprintf in ISR USART3 - dadurch massive Probleme (M)ein Lösungsansatz: - zwei memory regions - main ist region-1 zugeordnet - ISR ist region-2 zugeordnet - jetzt keine Probleme - Warum ist bei mir sprintf NICHT thread-safe? - Wann genau ist sprintf 'ATYPICAL' thread-UNSAFE? Gruß Claus
Um das zu beantworten muss man wissen was z.B. printf macht. Die Library-Funktion mündet am ende ja nicht automaisch in eine Hardware-, oder eine Speicher-Operation. Sie mündet in eine von dir zu implementierende write-Funktion. Wenn du an dieser Stelle nun auf globalen Speicher oder eine Peripherie zugreifst, dann musst du dich um die sicherheit kümmern und diesen Programmcode reentrant auslegen. Damit hat also die Library-Funktion nichts zu tun. Nehmen wir als weiteres Beispiel die Fuktion sprintf. Dieser Funktion gibst du einen Speicherebereich mit, in dem die Funktion arbeitet. Wenn dieser Speicherbereich global deklariert ist und von meheren Tasks oder Interrupts genutzt wirds, dann musst du den Aufrufer der Funktion sprintf entsprechend gegen reentranz sichern.
Star Keeper schrieb: > Sie mündet in eine von dir zu implementierende write-Funktion. sprintf()?????? claus schrieb: > - dadurch massive Probleme Woher weisst du daß die Probleme von sprintf kommen? Rufus Τ. Firefly schrieb: > claus schrieb: >> However, if you change locale in mid-session > > Machst Du das denn? Eben.
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.