嵌入式学习-GPIO中的一个异或问题

 1 基本概念

1.1异或定义和符号

异或,英文为exclusive OR,缩写成xor。在计算机语言中是一种二进制位运算符,通常写为^。

1.2异或的运算规则

通常来说,在bit位上,

即相同的两个数异或结果为0,两个数不同异或结果为1。任何二进制数与0异或,结果都是其本身。

1^1 =0

0^0=0

1^0=1

1.3异或的运算性质

(1)交换律: a^b = b^a

   (2)  结合律: (a^b)^c = a^(b^c)

2异或的应用

2.1使特定位进行0或1的翻转

例如对01001100的第一位和第二位进行翻转,可以将该数与00000011进行异或操作。

01001100^00000011 = 01001111

在嵌入式学习中,GPIO输入端对按键进行操作,通过小灯的闪烁与否,检验按键功能是否设置完好。

#define LED_G_TOGGLE           {LED_G_GPIO_PORT->ODR ^= LED_G_GPIO_PIN;}

上述,定义了一个宏,直接通过GPIO口对ODR寄存器进行操作,异或PIN的地址,实现ODR寄存器相应位上0和1的翻装。实现了高低电频的切换。

2.2变量交换

例如交换两个整数 a = 2 b=3,可通过异或的方法进行交换,不必使用临时变量

int a = 2;
int b = 3;

a = a ^ b    
b = a ^ b    
a = a ^ b    

2.3 在汇编语言中将变量置0

例如:xor  a,a

2.4 判断两个数是否相等

将两个数异或,若结果为0,则相等。

总结下就是在STM32中,要么直接对寄存器进行操作,要么通过封装好的库函数对寄存器进行操作,难免不涉及一些位运算符。其他的就是在学习c语言和x86原理中学到的一些。暂时只想到这些,未完待续。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值