printf fdevopen in Atolic

#5367625
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
Gast #5368245
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
Gast #5368752
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
Gast #5368822
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
#5369003
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren