Macro-Based Register Config Helper

Code

#include <stdio.h>
#include <stdint.h>

#define bit0  (1<<0)
#define bit1  (1<<1)
#define bit2  (1<<2)
#define bit3  (1<<3)
#define bit4  (1<<4)
#define bit5  (1<<5)
#define bit6  (1<<6)
#define bit7  (1<<7)

uint16_t build_register(uint8_t enable, uint8_t mode, uint8_t speed) {
   uint16_t register_value = 0;
   if(enable == 1)
   {
    register_value |= bit0;
   }
   else
   {

   }
   if(mode == 0)
   {

   }
   else if(mode == 1)
   {
    register_value |= bit1;
   }
   else if(mode == 2)
   {
    register_value |= bit2;
   }
   else
   {
    register_value |= bit1;
    register_value |= bit2;
   }
   if(speed == 0)
   {

   }
   else if(speed ==1)
   {
    register_value |= bit3;
   }
   else if(speed == 2)
   {
    register_value |= bit4;
   }
   else if(speed == 3)
   {
    register_value |= bit3;
    register_value |= bit4;
   }
   else if(speed == 4)
   {
    register_value |= bit5;
   }
   else if(speed == 5)
   {
    register_value |= bit5;
    register_value |= bit3;
   }
   else if(speed == 6)
   {
    register_value |= bit5;
    register_value |= bit4;
   }
   else
   {
    register_value |= bit5;
    register_value |= bit4;
    register_value |= bit3;
   }


    return register_value;
}

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;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1 2 4

Expected Output

37