and在c语言中的作用,随后在寄存器上使用OR和AND复合赋值运算符的目的

本文介绍了C/C++中位操作的顺序影响,如A|=0x02;A&=0x02;等同于A=0x02;,除非A是硬件寄存器。当A是硬件寄存器时,需要查阅MCU或CPU手册以了解特定序列的原因。区分变量和硬件寄存器主要看定义,通常硬件寄存器会使用volatile关键字并直接映射到内存地址。volatile关键字确保编译器不对读写操作进行优化,保证对硬件的正确访问。
摘要由CSDN通过智能技术生成

当然,以下两个命令的顺序:

A |= 0x02;

A &= 0x02;

与以下内容相同:

A = 0x02;

除非A不是变量,而是硬件寄存器.在这种情况下,您需要参考MCU / cpu(或映射外设)手册来检查为什么需要这个序列.

UPDATE

变量与硬件寄存器

在上面的评论中,OP询问如何区分变量和寄存器.

这很容易.您需要做的就是查看定义.虽然典型的变量将被定义为:

unsigned char A;

硬件寄存器定义类似于:

#define A (*(volatile uint16_t *)(0x1234))

这里,A被定义为硬件寄存器的值,映射到0x1234处的地址.每个微控制器或cpu都有自己独特的硬件寄存器集,不仅在不同类型的架构和模型之间,而且在不同的制造商之间也会有所不同.如果没有详细记录源代码,告诉硬件数据表的唯一方法是查看硬件数据表.此外,一些高级架构可以将来自某些外设的硬件寄存器映射到cpu地址空间,因此可以以相同的方式访问外部组件的硬件寄存器.

请注意volatile关键字.从wiki:

This keyword prevents an optimizing compiler from optimizing away subsequent reads or writes and thus incorrectly reusing a stale value or omitting writes. Volatile values primarily arise in hardware access (memory-mapped I/O),where reading from or writing to memory is used to communicate with peripheral devices,and in threading,where a different thread may have modified a value.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值