0
0
Embedded Cprogramming~20 mins

Printf debugging over UART in Embedded C - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
UART Debugging Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of UART printf with buffer overflow
Consider this embedded C code snippet that sends debug messages over UART using printf. What will be the output on the UART console?
Embedded C
#include <stdio.h>
#include <string.h>

char uart_buffer[10];

int uart_send(const char *msg) {
    // Simulate UART send by copying to buffer
    strcpy(uart_buffer, msg);
    return 0;
}

int main() {
    char debug_msg[20];
    sprintf(debug_msg, "Value: %d", 12345);
    uart_send(debug_msg);
    printf("UART buffer: %s\n", uart_buffer);
    return 0;
}
AUART buffer: Value: 123456789
BUART buffer: Value: 1234
CUART buffer: Value: 12345
DRuntime error due to buffer overflow
Attempts:
2 left
💡 Hint
Remember that strcpy copies until the null terminator, but uart_buffer is only 10 bytes.
🧠 Conceptual
intermediate
1:30remaining
Why use printf debugging over UART in embedded systems?
Which of the following is the main reason developers use printf debugging over UART in embedded systems?
ATo increase the speed of the embedded program execution
BTo visually see variable values and program flow without a debugger
CTo permanently store debug logs in non-volatile memory
DTo reduce power consumption during debugging
Attempts:
2 left
💡 Hint
Think about what printf debugging helps you understand during development.
🔧 Debug
advanced
2:00remaining
Identify the cause of missing UART output
This embedded C code is supposed to send a debug message over UART using printf. However, no output appears on the UART console. What is the most likely cause?
Embedded C
#include <stdio.h>

void uart_init() {
    // UART initialization code
}

int uart_putchar(char c) {
    // Send character over UART hardware
    return 0;
}

int main() {
    uart_init();
    printf("Debug: %d\n", 42);
    return 0;
}
AThe main function should return void, not int
BUART hardware is not initialized properly
CThe uart_putchar function is missing a return statement
DThe printf output is buffered and not flushed to UART
Attempts:
2 left
💡 Hint
Think about how printf sends characters and when output appears on UART.
📝 Syntax
advanced
2:30remaining
Correct UART printf redirection code
Which option correctly implements the function to redirect printf output to UART by overriding the _write syscall in embedded C?
Embedded C
int _write(int file, char *ptr, int len) {
    for (int i = 0; i < len; i++) {
        uart_send_char(ptr[i]);
    }
    return len;
}
A
int _write(int file, char *ptr, int len) {
    for (int i = 0; i &lt; len; i++) {
        uart_send_char(ptr[i]);
    }
    return len;
}
B
int _write(int file, char ptr[], int len) {
    int i = 0;
    while (ptr[i] != '\0') {
        uart_send_char(ptr[i]);
        i++;
    }
    return i;
}
C
void _write(int file, char *ptr, int len) {
    for (int i = 0; i &lt; len; i++) {
        uart_send_char(ptr[i]);
    }
}
D
int _write(int file, char *ptr, int len) {
    uart_send_string(ptr);
    return len;
}
Attempts:
2 left
💡 Hint
The _write function must return the number of bytes written and send exactly len bytes.
🚀 Application
expert
3:00remaining
Calculate UART debug message transmission time
An embedded system sends debug messages over UART at 115200 baud rate using printf. If a debug message is 50 characters long, approximately how long in milliseconds will it take to transmit the entire message? Assume 1 start bit, 8 data bits, no parity, and 1 stop bit per character.
AApproximately 4.35 ms
BApproximately 0.43 ms
CApproximately 8.7 ms
DApproximately 17.4 ms
Attempts:
2 left
💡 Hint
Calculate bits per character and total bits, then divide by baud rate.