Я не слышал о каких-либо общих стандартах, хотя во многих местах, где я работал, были стандарты именования и т. Д.
Каждый бит в маске определяется индивидуально, например:
#define TANK_GAUGE_OK (0x80) // 1 when the gauge is properly initialized and working
#define TANK_FULL (0x08) // 1 when tank is filled completely
#define TANK_HIGH (0x04) // 1 when tank is at least 1/4 full
#define TANK_LOW (0x02) // 1 when tank is at least 1/8 full
#define TANK_NOTEMPTY (0x01) // 1 when there is some fuel in tank
#define TANK_LIGHTS_MASK (TANK_FULL | TANK_HIGH | TANK_LOW | TANK_NOTEMPTY )
Для имен функций -
SET_ON(unsigned setMask), SET_OFF(unsigned clearMask)
Чтобы обновить определенные биты в регистре:
Update(changeMask, valueMask)
, где changeMask содержит биты, которые вы хотите обновить, до 1, а valueMask содержит значения битов, которые вы хотите установить.
Вы бы использовали их как этот код для встроенного датчика уровня топлива:
static unsigned short fuelGaugeRegisterValue = 0x0000;
extern unsigned short *fuelGaugeRegister;
. . .
void UpdateFuelGauge(unsigned changeMask, unsigned valueMask) {
// code to grab mutex goes here...
fuelGaugeRegisterValue &= (~changeMask);
fuelGaugeRegisterValue |= ( changeMask & valueMask);
*fuelGaugeRegister = fuelGaugeRegisterValue;
// code to release mutex goes here...
}
. . .
void SetFuelGaugeFromLevel(unsigned byte currentLevel)
if ( currentLevel == 0xFF ) {
UpdateFuelGauge( TANK_LIGHTS_MASK, TANK_LIGHTS_MASK );
}
else if (level >= 0x03 ) {
UpdateFuelGauge( TANK_LIGHTS_MASK, (TANK_HIGH | TANK_LOW | TANK_NOTEMPTY) );
}
else if (level >= 0x02 ) {
UpdateFuelGauge( TANK_LIGHTS_MASK, (TANK_LOW | TANK_NOTEMPTY) );
}
else if (level > 0x01 ) {
UpdateFuelGauge( TANK_LIGHTS_MASK, TANK_NOTEMPTY );
}
else {
UpdateFuelGauge( TANK_LIGHTS_MASK, 0 );
}
}
Некоторые другие заметки:
Попробуйте назвать биты и стандартные маски таким образом, чтобы вы могли сделать обоснованное предположение о том, что бит будет означать, когда он «утвержден». Например, «EMPTY_FLAG» заставляет вас угадать, означает ли «1» «пусто» или «не пусто».
В Википедии есть статья о маскировании сигналов , в которой используется некоторая терминология, но в настоящее время в ней упоминаются любые соглашения об именах.