Guten Abend, ich bin möchte in meinen STM32 Projekten auch wider die prinf Funktion verwenden. Leider bringe erkennt Atolic den Befehl fdevopen nicht. Wie weiße ich der Entwicklungsumgebung die Ausgabe für printf zu? Lg
Handbuch lesen? Alternative: sprintf verwenden um in char-array auszugeben, das dann mit Deiner gewünschten Ausgabefunktion an das gewünschte Ausgabegerät (Uart, Display, Netzwerk ...) übergeben.
Ganz einfach die _write()-Funktion überschreiben, welche von printf zur Ausgabe genutzt wird, siehe z.B. https://electronics.stackexchange.com/questions/206113/how-do-i-use-the-printf-function-on-stm32 So kann man übrigens printf auch an SWO umleiten. Eine Anleitung gibt es unter anderem direkt von den Insulanern: http://blog.atollic.com/cortex-m-debugging-printf-redirection-to-a-debugger-console-using-swv/itm-part-1
:
Bearbeitet durch User
Christopher J. schrieb: > Ganz einfach die _write()-Funktion überschreiben, welche von printf zur > Ausgabe genutzt wird, siehe z.B. > https://electronics.stackexchange.com/questions/206113/how-do-i-use-the-printf-function-on-stm32 Hallo und Danke für die Antwort. Mir ist leider nicht ganz klar wo ich diese "syscalls.c." ist Und verstehe ich das richtig das ich diese syscalls.c abändern muss? Danke Lg
Wenn du mit Atollic ein neues Projekt anlegst, dann fragt der dich ob du die Datei syscalls.c generieren willst oder nicht (siehe Screenshot). Außerdem fragt der noch ob du ein abgespecktes printf verwenden willst ("tinyprintf"). In der syscalls.c findest du dann die Prototypen für _write() und co.
Christopher J. schrieb: > Wenn du mit Atollic ein neues Projekt anlegst, dann fragt der dich > ob du > die Datei syscalls.c generieren willst oder nicht (siehe Screenshot). > Außerdem fragt der noch ob du ein abgespecktes printf verwenden willst > ("tinyprintf"). In der syscalls.c findest du dann die Prototypen für > _write() und co. Achso ich verstehe. Ich habe das Projekt mit CubeMx angefangen und dort habe ich keine Einstellung für Syscalls.c und prinf. Kann man dies in Atollic auch nachträglich da zufügen? Lg und Danke
straps schrieb: > Kann man dies in Atollic auch nachträglich da zufügen? Ich würde einfach ein neues Projekt anlegen, die beiden Dateien generieren und dann herüberkopieren und dem CubeMX-Projekt hinzufügen.
Christopher J. schrieb: > Ich würde einfach ein neues Projekt anlegen, die beiden Dateien > generieren und dann herüberkopieren und dem CubeMX-Projekt hinzufügen. Danke für deine Antwort. Also muss ich in der syscalls.c unter write nur mehr
1 | HAL_UART_Transmit(&huart2,(uint8_t *)ptr, len,0xffff); |
eintragen um zB über Uart 2 zu senden? habe ich das richtig verstanden? Danke LG
Prinzipiell ja aber denk daran, dass _write() als Signatur int _write(int file, char *data, int len) hat, d.h. "int file" ist nicht zwingend STDOUT (falls du eventuell mal etwas mit Dateien machen willst) und der Rückgabewert ist "int" (Anzahl geschriebener Bytes) und nicht "void". Halte dich am besten an die Antwort aus dem Stackoverflow-Link von oben.
Beitrag #5379169 wurde von einem Moderator gelöscht.
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.