Gast
#5633947
Hallo, ich habe hier einen ARM STM32F4, auf dem ich gerne printf nutzen würde, um Debug ausgaben zu machen. Dazu habe ich den Uart aktviert (tut). Dieses Modul stellt eine uart_send_string() funktion zur Verfügung. Tut auch. Um printf zu nutzen habe ich nun die Systemaufrufe _sbrk (für Heap) und _write angelegt. _write leitet alles auf die uart_send_string() funktion um. Das Verhalten ist nun aber merkwürdig. Wenn ich ein printf("Hallo\n"); ausführe, werden zwei bytes an die uart_send_string() Funktion übergeben 0xB9 und 0x0B. Unabhängig vom Inhalt des printf's. Habe daraufhin mit setvbuf(stdout, NULL, _IONBF, 0); Das Puffern deaktiviert. Jetzt funktioniert printf einigermaßen. Es schluckt jedoch immer das '\n', wenn es das letzte Zeichen im String ist. Ich liste mal einige Strings auf, wie ich sie in printf schreibe und was gesendet wird: Hallo\n => Hallo Hallo\nHallo\n => Hallo\nHallo Hallo\nA => Hallo\nA Es schluckt einfach immer das letzte newline-Zeichen. Ein weiteres printf danach oder ein fflush(stdout) helfen nicht. Das Zeichen ist weg. Kann mir jemand erklären, warum das passiert? Werkle da jetzt schon einige Stunden rum. Edit: puts("Hallo\nHallo\n") tut was es soll. Es könnte auch am Heap liegen. Dieser tut aber soweit. Habe einige mallocs in Betrieb, die alle funktionieren.