Я работаю со старым кодом во встроенном приложении. Я видел два различных подхода, чтобы установить биты флагов:Определить флаг в c, битовой структуре или макросетах и получить
1-
#define BIT_0 0x1
#define BIT_1 0x2
#define BIT_2 0x4
#define BIT_3 0x8
#define Curr BIT_0
#define Ready BIT_1
#define Sleep BIT_2
#define Wait BIT_3
#define SET_BIT(var,bits) ((var) |= (bits))
#define CLEAR_BIT(var,bits) ((var) &= (~(bits)))
2-
struct PROCESS_FLAG
{
unsigned long Curr :1;
unsigned long Ready :1;
unsigned long Sleep :1;
unsigned long Wait :1;
};
union STATE_FLAG_REG
{
unsigned long All;
struct STATE_FLAG bit;
}
В первом я определить макросы, чтобы получить и установить флаги, я могу установить любую переменную флаг , как unsigned long flag
и установить с SET_BIT(flag,3)
.
Во втором определении структуры битового поля.
У меня есть вопрос:
- Что является лучшим способом, с точки зрения экономии памяти?
- Каков наилучший способ использования ЦП?
- Что более правильно определять?
Примечание: если есть какой-либо другой хороший подход, я был бы рад узнать больше.
ваши примеры имеют много тонких проблем ... они действительно должны быть исправлены, прежде чем задавать эти вопросы. –
@KarolyHorvath, пожалуйста, скажите мне, где проблемы? –
нет необходимости использовать флаги в вашем примере. Если у вас есть только один флаг, вы можете использовать переменную вместо 4 для сохранения состояния. –