首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用枚举设置标志时AVR C的随机行为

使用枚举设置标志时AVR C的随机行为
EN

Stack Overflow用户
提问于 2015-04-23 20:13:03
回答 1查看 142关注 0票数 2

对于atmega1280 C上的AVR应用程序中的程序状态,我使用的枚举和标志有问题,下面是我如何处理国旗的代码:

代码语言:javascript
复制
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是官方支持的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-23 20:18:51

is 16 bits on AVR.

代码语言:javascript
复制
uint8_t getFlag(flag_t flag)
{
    return ( (flags & (1L<<flag) ) !=0);
}

等。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29833421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档