I have a snippet of code below that checks whether a register value is set.
# define My_register_array(index) (*((P2VAR(uint32, AUTOMATIC, APPL_VAR))Group_register(index))) /*eg: Group_register(0) address is 0xF3456775*/
# define SET_INIT(index) ((uint32)1u << (index))
#define MY_CODE
FUNC(boolean, MY_CODE) bo_checkInit(uint32 index)
{
boolean retVal = FALSE;
/* Check register is initialized */
if((My_register_array(index) & SET_INIT(index)) == SET_INIT(index))
{
retVal = TRUE;
}
return retVal;
}
int main()
{
boolean retVal = FALSE;
retVal = bo_checkInit(0); // call function
if(retVal)
{
printf("register is initialized\n");
}
else
{
printf("register is not initialized\n");
}
return 0;
}
I am trying to understand this code and would like to know its purpose.
if((My_register_array(index) & SET_INIT(index)) == SET_INIT(index))
Is this code checking if the register value is set to 1? If anyone can explain this, it would help me understand the concept.
The result of &
(binary AND) is a 1-bit wherever the bit is set in both operands, a zero-bit otherwise.
So (X & BitMask) == BitMask
becomes true only if all bits (only one in your case) in the mask are also set in X
.