Pointer to Struct with Bitfields

Code

#include <stdio.h>
#include <stdbool.h>

typedef struct{
    unsigned char baudrate: 4;
    unsigned char tx_enable: 1; 
    unsigned char rx_enable: 1; 
    unsigned char tx_irq_en: 1;
    unsigned char rx_irq_en: 1; 
    unsigned char parity_en: 1; 
    unsigned char stop_bits: 1; 
    unsigned char reserved: 22; 
}UART_ControlRegister_t; 

bool config_uart(UART_ControlRegister_t *ptr){
    if(ptr == NULL) return false; 
    ptr->baudrate = 9; 
    ptr->tx_enable = 1; 
    ptr->rx_enable = 1; 
    ptr->tx_irq_en = 1; 
    ptr->rx_irq_en = 0; 
    ptr->parity_en = 1; 
    ptr->stop_bits = 0; 
    return true; 
}

void check_uart(UART_ControlRegister_t *reg){
     printf("baudrate = %u\n", reg->baudrate);
    printf("tx_enable = %u\n", reg->tx_enable);
    printf("rx_enable = %u\n", reg->rx_enable);
    printf("tx_irq_en = %u\n", reg->tx_irq_en);
    printf("rx_irq_en = %u\n", reg->rx_irq_en);
    printf("parity_en = %u\n", reg->parity_en);
    printf("stop_bits = %u", reg->stop_bits);
}



int main(){
    UART_ControlRegister_t reg = {0}; 
    if(config_uart(&reg) == true){
        check_uart(&reg); 
    }
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

Expected Output

baudrate = 9 tx_enable = 1 rx_enable = 1 tx_irq_en = 1 rx_irq_en = 0 parity_en = 1 stop_bits = 0