0
0
Embedded Cprogramming~20 mins

DMA with UART for bulk transfer in Embedded C - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
DMA UART Bulk Transfer Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
DMA UART Bulk Transfer Initialization Output
What will be the output of this embedded C code snippet that initializes DMA for UART bulk transfer and starts the transfer?
Embedded C
#include <stdio.h>
#include <string.h>

// Simulated UART and DMA registers
volatile int UART_TX_READY = 1;
volatile int DMA_TRANSFER_COMPLETE = 0;

void DMA_StartTransfer(char *buffer, int length) {
    if (UART_TX_READY) {
        printf("DMA started for %d bytes\n", length);
        DMA_TRANSFER_COMPLETE = 1;
    } else {
        printf("UART not ready\n");
    }
}

int main() {
    char data[] = "Hello DMA UART!";
    DMA_StartTransfer(data, strlen(data));
    if (DMA_TRANSFER_COMPLETE) {
        printf("DMA transfer complete\n");
    } else {
        printf("DMA transfer not complete\n");
    }
    return 0;
}
A
DMA started for 15 bytes
DMA transfer complete
B
UART not ready
DMA transfer not complete
C
DMA started for 14 bytes
DMA transfer complete
D
DMA started for 15 bytes
DMA transfer not complete
Attempts:
2 left
💡 Hint
Check the length of the string passed to DMA_StartTransfer and the UART_TX_READY flag.
🧠 Conceptual
intermediate
1:30remaining
DMA and UART Bulk Transfer Buffer Size
In a DMA-based UART bulk transfer, why is it important to correctly configure the DMA buffer size?
ABecause the DMA buffer size controls the UART baud rate directly.
BBecause the DMA buffer size determines how many bytes are transferred in one operation, preventing data overflow or truncation.
CBecause the DMA buffer size sets the UART parity bits automatically.
DBecause the DMA buffer size decides the CPU clock speed during transfer.
Attempts:
2 left
💡 Hint
Think about how DMA moves data and what happens if the buffer is too small or too large.
🔧 Debug
advanced
2:00remaining
Identify the Bug in DMA UART Transfer Code
What error will this code cause when running a DMA UART bulk transfer?
Embedded C
char uart_buffer[10];
void start_dma_transfer() {
    // Intentionally incorrect length
    int length = 20;
    DMA_StartTransfer(uart_buffer, length);
}

void DMA_StartTransfer(char *buffer, int length) {
    // Simulated transfer
    printf("Transferring %d bytes\n", length);
}
ABuffer overflow because length exceeds buffer size
BSyntax error due to missing semicolon
CNo output because DMA_StartTransfer is never called
DRuntime error due to null pointer
Attempts:
2 left
💡 Hint
Check the buffer size and the length passed to DMA_StartTransfer.
📝 Syntax
advanced
1:30remaining
Syntax Error in DMA UART Transfer Setup
Which option contains the correct syntax to configure DMA for UART transmission in embedded C?
Embedded C
/* Assume DMA_Config is a struct with fields: source, destination, length */
DMA_Config dma_cfg;
dma_cfg.source = uart_tx_buffer;
dma_cfg.destination = UART_DATA_REGISTER;
dma_cfg.length = 64;
A
dma_cfg.source = uart_tx_buffer;
 dma_cfg.destination = UART_DATA_REGISTER
 dma_cfg.length = 64;
B
dma_cfg.source = uart_tx_buffer
 dma_cfg.destination = UART_DATA_REGISTER;
 dma_cfg.length = 64;
C
dma_cfg.source := uart_tx_buffer;
 dma_cfg.destination := UART_DATA_REGISTER;
 dma_cfg.length := 64;
D
dma_cfg.source = uart_tx_buffer;
 dma_cfg.destination = UART_DATA_REGISTER;
 dma_cfg.length = 64;
Attempts:
2 left
💡 Hint
Remember the correct statement terminator in C.
🚀 Application
expert
2:00remaining
Calculate Total Bytes Transferred in DMA UART Bulk Transfer
Given a DMA UART bulk transfer configured with a buffer size of 128 bytes and a transfer count of 10, what is the total number of bytes transferred?
A10 bytes
B138 bytes
C1280 bytes
D128 bytes
Attempts:
2 left
💡 Hint
Multiply buffer size by transfer count to get total bytes.