13. Macro-Based Register Config Helper

Discussions3
Log in to post comments and replies.
vigneshsangaa
vigneshsangaa
Sep 11 2026

#include <stdio.h>

#include <stdint.h>


 

// Define macros here

#define ENABLE(reg,enable) ((reg) |=enable)

#define MODE(reg, mode) ((reg) |=(mode<<1))

#define SPEED(reg, speed) ((reg) |= (speed << 3))


 

uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {

    uint16_t reg =0;

    ENABLE(reg, enable);

    MODE(reg, mode);

    SPEED(reg, speed);

    return reg;

}


 

int main() {

    uint8_t enable, mode, speed;

    scanf("%hhu %hhu %hhu", &enable, &mode, &speed);


 

    uint16_t reg = build_register(enable, mode, speed);

    printf("%u", reg);

    return 0;

}

0
gnoblinanon
gnoblinanon
Sep 11 2026

I did not understand this question at all

0
Spandan
Spandan
Sep 13 2026

what did you not understand? I will try to explain

0
KangajanKuganathan

#include<stdio.h>

#include<stdint.h>


 

//Define bit position macros here

#define ENABLE      0

#define MODE        1

#define SPEED       3


 

uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {

    // Use macros to set fields

    uint16_t result = 0x0000;

    result |= (enable << ENABLE);

    result |= (mode << MODE);

    result |= (speed << SPEED);

    return result;

}


 

int main() {

    uint8_t enable, mode, speed;

    scanf("%hhu %hhu %hhu", &enable, &mode, &speed);


 

    uint16_t reg = build_register(enable, mode, speed);

    printf("%u", reg);

    return 0;

}

0