Forum: Compiler & IDEs printf fdevopen in Atolic


von straps (Gast)


Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Christopher J. (christopher_j23)


Lesenswert?

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
von straps (Gast)


Lesenswert?

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

von Christopher J. (christopher_j23)


Angehängte Dateien:

Lesenswert?

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.

von straps (Gast)


Lesenswert?

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

von Christopher J. (christopher_j23)


Lesenswert?

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.

von straps (Gast)


Lesenswert?

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

von Christopher J. (christopher_j23)


Lesenswert?

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
Noch kein Account? Hier anmelden.