wo ist da ne if-Abfrage?

du musst nichts mit fdevopen() machen, nur solltest du deine uart_putchar nochmal überarbeiten, weil, wie schon gesagt, funktioniert die wegen einer Endlosrekursion nicht
also, wenn du uart_putchar aufrufst, wird erst das pin_led18on; abgearbeitet, dann aber wird wieder uart_putchar aufgerufen und wieder und wieder und wieder...