异或的使用在机器人项目上的应用||位运算符在智能驾驶项目上的应用

目录

一、异或的使用在机器人项目上的应用

二、异或(XOR)操作的几个特点

三、位运算符在智能驾驶项目上的应用


一、异或的使用在机器人项目上的应用

        在当时负责皮带机器人项目中,就有一个很好的应用。此时需要设置电机驱动模块、编码器驱动模块、CPE模块、甲烷、一氧化碳等模块的状态标志位及异常,此时可以使用设置:

static uint32_t mod_fault_flag = 0;   /* 模块故障标志位 */
static uint32_t mod_alarm_flag = 0;   /* 模块告警标志位 */

在代码的使用:

//确认有模块异常后再切换至待机模式  在遇到mod_fault_flag对应位标志位被置于1时
    if(mod_fault_flag && ahead_as_dyp.state == RT_EOK && rear_as_dyp.state == RT_EOK &&  mark_sign.mode_mark != DEV_BATTERY_CHARGE &&  mark_sign.mode_mark != DEV_BATTERY_CHARGE_END)
    {
//            if((mod_fault_flag & (1 << 3)) != 0)  //说明"mod_fault_flag 中的 (1 << 3) 为 1
            //if((ABS_DIFF(last_mod_fault_tick, rt_tick_get()) >= 2*1000) && ((mod_fault_flag & (1 << 3)) == 0) && ((mod_fault_flag & (1 << 13)) == 0)  )
        if((ABS_DIFF(last_mod_fault_tick, rt_tick_get()) >= 2*1000) && 
            (((mod_fault_flag & (1 << 10)) == 1)
//             ||  ((mod_fault_flag & (1 << 0 )) == 1) 
            || ((mod_fault_flag & (1 << 5 )) == 1)
            ))

uint32_t mod_fault_flag = 0;有32位可以供表示,可以表示32个设备状态的故障标志位,完全够用。

二、异或(XOR)操作的几个特点

异或的自反性:两个相同值异或结果为 0。即:a XOR a = 0。
异或的零值性:任何值与 0 异或结果为原值。即:a XOR 0 = a。
异或的交换律:异或操作满足交换律,交换操作数的位置结果不变。即:a XOR b = b XOR a。
异或的结合律:异或操作满足结合律,即多个操作数进行异或操作结果与操作数的顺序无关。即:(a XOR b) XOR c = a XOR (b XOR c)。
异或的消去律:对于某个值进行两次异或相同的操作数,结果为原值。即:(a XOR b) XOR b = a。
异或可用于交换值:通过异或操作可以在不使用额外变量的情况下交换两个变量的值。
这些特点使得异或操作在计算机科学与编程中具有广泛的应用,例如:

nt a=8, b=10;

则按位异或运算如下:

a经过了2次交换,b经过了1次交换。经过该操作后,a,b的值已经进行了交换。这也可以用在交换2个字符串上。

三、位运算符在智能驾驶项目上的应用

在智驾交互箱项目中,处理模式反馈中,也用到了位运算

根据以上协议内容:

uint16_t bit7 = (infoArray[3]>>6)&1;

infoArray[3]=bit7

该操作是将将infoArray[3]的第7位(从0开始计数)提取出来,并将其存储在变量bit7中。通过右移操作符>>infoArray[3]向右移动6位,使得第7位变为最低位。然后,使用按位与运算符&将结果与1进行按位与操作,以保留最低位的值。最后,将结果赋值给变量bit

在故障信息中表示油泵DC/AC状态也是如此:

infoArray[18] =machineInfo.Falut_level;

uint16_t bit6_7 = (infoArray[18]>>6) &3;

infoArray[18]>>6=bit6_7

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值