Дарю! :) FLAG ( eeprom_good ,flags, 0x0001U )
FLAG ( user_calibration ,flags, 0x0002U )
FLAG ( factory_flag ,flags, 0x0004U )
FLAG ( aborted ,flags, 0x0008U )
FLAG ( turnon_flag ,flags, 0x0010U )
FLAG ( master_flag ,flags, 0x0020U )
FLAG ( blink ,flags, 0x0040U )
FLAG ( done ,flags, 0x0080U )
FLAG ( remote_change_enabled ,flags, 0x0100U )
FLAG ( echo_disabled ,flags, 0x0200U )
FLAG ( main_loop ,flags, 0x0400U )
FLAG ( enable_water_stop ,flags, 0x0800U )
FLAG ( enable_pumpA_stop ,flags, 0x1000U )
FLAG ( enable_pumpB_stop ,flags, 0x2000U )
FLAG ( canA_error_indicated ,flags, 0x4000U )
FLAG ( canB_error_indicated ,flags, 0x8000U )
#pragma inline=forced
uint GetFlag(uint name);
#pragma inline=forced
void OnFlag(uint name);
#pragma inline=forced
void OffFlag(uint name);
#pragma inline=forced
void ToggleFlag(uint name);
/* enumeration of flags */
enum {
#define FLAG( name, var, bit) name,
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
};
/* generation of flag bits masks */
#define FLAG( name, var, bit) enum { m_##name=(bit)};
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
/* generation of extern var */
#define FLAG(name, port, bit)
#define FLAGS_VARIABLE(var) extern volatile unsigned int var;
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
// generation of GET functions
unsigned int GetFlag( unsigned int name)
{ switch (name) {
#define FLAG( name, var, bit) case name: return (var & bit);
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
default: return 0; } }
// generation of ON flag
void OnFlag( unsigned int name)
{ switch (name) {
#define FLAG(name, var, bit) case name: var|=bit; return;
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
}}
// generation of OFF flag
#pragma diag_suppress=Pe068
void OffFlag( unsigned int name)
{ switch (name) {
#define FLAG(name, var, bit) case name: var&=~bit; return;
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
}}
#pragma diag_warning=Pe068
// generation of TOGGLE output functions
void ToggleFlag( unsigned int name)
{ switch (name) {
#define FLAG(name, var, bit) case name: var^=bit; return;
#define FLAGS_VARIABLE(var)
#include "h__flags.h"
#undef FLAG
#undef FLAGS_VARIABLE
}}