0
0
Embedded Cprogramming~10 mins

Printf redirect to UART in Embedded C - Step-by-Step Execution

Choose your learning style9 modes available
Concept Flow - Printf redirect to UART
Start
Call printf
printf calls _write
_write sends data to UART
UART transmits data
Data appears on terminal
End
When printf is called, it internally calls the _write function, which we redirect to send characters over UART, so output appears on a terminal.
Execution Sample
Embedded C
int _write(int file, char *ptr, int len) {
  for (int i = 0; i < len; i++) {
    UART_SendChar(ptr[i]);
  }
  return len;
}
This code redirects printf output by sending each character to UART.
Execution Table
StepActionInputUART_SendChar Called WithReturn Value
1printf called"Hello\n"
2printf calls _write"Hello\n", length=6
3Loop i=0ptr[0] = 'H''H'
4Loop i=1ptr[1] = 'e''e'
5Loop i=2ptr[2] = 'l''l'
6Loop i=3ptr[3] = 'l''l'
7Loop i=4ptr[4] = 'o''o'
8Loop i=5ptr[5] = '\n''\n'
9_write returns6
10printf completes
💡 All characters sent to UART, _write returns length, printf finishes.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
i01234566
ptr[i]'H''e''l''l''o''\n'
Key Moments - 3 Insights
Why does printf call _write instead of sending characters directly?
printf uses _write as a low-level output function. Redirecting _write lets us control where printf sends its output, as shown in steps 2-9 of the execution_table.
What happens if UART_SendChar is not implemented correctly?
If UART_SendChar fails, characters won't be sent, so output won't appear on the terminal. The loop in steps 3-8 depends on UART_SendChar working properly.
Why does _write return the length of characters sent?
_write returns the number of characters sent to signal success to printf, as seen in step 9. This tells printf all data was handled.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what character does UART_SendChar send at step 5?
A'l'
B'H'
C'e'
D'o'
💡 Hint
Check the 'UART_SendChar Called With' column at step 5 in execution_table.
At which step does _write finish sending all characters?
AStep 8
BStep 9
CStep 10
DStep 6
💡 Hint
Look for when _write returns in the execution_table.
If the input string length was 4 instead of 6, how would the variable 'i' final value change?
AFinal value would be 6
BFinal value would be 0
CFinal value would be 4
DFinal value would be 5
💡 Hint
Check variable_tracker for 'i' values and relate to string length.
Concept Snapshot
Redirect printf output by implementing _write function.
_write sends each character to UART using UART_SendChar.
printf calls _write internally to output data.
Return number of characters sent from _write.
This lets printf output appear on UART terminal.
Full Transcript
When you use printf in embedded C, it doesn't send characters directly. Instead, it calls a function named _write. By writing your own _write function, you can send each character to UART using UART_SendChar. This way, all printf output goes through UART and appears on your terminal. The _write function loops over each character in the string, sends it via UART, and returns the total number of characters sent. This process is shown step-by-step in the execution table, tracking each character sent and the loop variable. Understanding this flow helps you redirect printf output to UART easily.