gpt4 book ai didi

c++ - 使用一些掩码对 GPIO 进行按位操作

转载 作者:太空狗 更新时间:2023-10-29 21:16:51 25 4
gpt4 key购买 nike

我想对 GPIO 结果进行一些位操作,假设我有三个变量来定义某些 GPIO 设备的状态是打开还是关闭:

mask          : 1 means bit is set, and need to be calculate
value : real gpio value 0 / 1
active_level; : 1 means high active, 0 means low active

假设我有:

mask  : 0010 0001
value : 0000 0001
active: 0000 0001

有没有什么好的方法(目前我正在考虑循环)根据事件水平得到结果?在上面的例子中,bit0 为高电平有效,bit5 为低电平有效,由于 bit0 值为高电平,bit 5 为低电平,因此结果为:

result: 0010 0001 

稍后,我想做的是检查结果是否==掩码,如果是,则表示 GPIO 设备状态已打开(例如,两个按钮同时按下)

谢谢

最佳答案

您可以考虑以下位操作。

转换为“1表示激活”格式

value_in_activeness = value ^ (~active);

此操作将格式从“1 为高,0 为低”变为“1 为有效,0 为无效”。

active 表示“哪些位为高电平有效,哪些位为低电平有效”。方便地,它的补充 ~active 表示“我想转换哪些位以及我想保留哪些位”。 XOR 运算 ^ 进行实际转换。

在您的示例中,value_in_activeness 将变为 1111 1111。但别担心,因为我们还有下一步。

屏蔽掉“我不在乎”的部分

bits_I_care = value_in_activeness & mask;

使用 & 进行位掩码非常基础,我不知道要解释什么或如何解释。

在您的示例中,结果是 0010 0001

关于c++ - 使用一些掩码对 GPIO 进行按位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com