对于atmega1280 C上的AVR应用程序中的程序状态,我使用的枚举和标志有问题,下面是我如何处理国旗的代码:
typedef enum
{
ALARM_FLAG,
ARMED_FLAG,
RC_AUTH_FLAG,
ADC_DATA_READY_FLAG,
PLAY_MUSIC_FLAG,
PLAY_ALARM_FLAG,
MUSIC_DREQUEST_FLAG,
SENSOR_CHANGE_FLAG,
RFID_DECODED_FLAG,
RFID_AUTH_FLAG,
RFID_ENABLE_FLAG,
RFID_DISABLE_FLAG,
REMOTE_RX_COMPLETE,
REMOTE_TX_COMPLETE,
REDRAW_VOLUME,
FOOTER_UPDATE_FLAG,
ADD_RFID_FLAG,
ERROR_FLAG,
} flag_t;
static volatile uint32_t flags = 0;
uint8_t getFlag(flag_t flag)
{
return ( (flags & (1<<flag) ) !=0);
}
void setFlag(flag_t flag)
{
flags |= 1<<flag;
}
void clearFlag(flag_t flag)
{
flags &= ~(1<<flag);
}现在,当我使用ADD_RFID_FLAG和ERROR_FLAG下面的标志时,一切都很好,但是当我使用ADD_RFID_FLAG或ERROR_FLAG时,这些标志不会被设置。
由于ADD_RFID_FLAG的值为16,我怀疑对大于16位的值进行移位/位操作会出问题。这是一个8位控制器,这个代码应该工作得很好,16位代码可以,据我所知,uint32_t是官方支持的。
发布于 2015-04-23 20:18:51
https://stackoverflow.com/questions/29833421
复制相似问题