当前位置: 首页 > news >正文

一个寄存器的bit2 bit3位由10修改成11,C示例

  • 方法1:
    如果需要将一个寄存器中的 bit2 和 bit3 两个位从 11 修改为 10,可以使用如下的 C 语言代码实现:
// 将寄存器的 bit2 和 bit3 位从 11 修改为 10
volatile uint32_t *reg_addr = (volatile uint32_t *)0x12345678; // 假设寄存器地址为 0x12345678
*reg_addr &= ~(0x3 << 2); // 先将 bit2 和 bit3 位清零
*reg_addr |= (0x2 << 2); // 使用按位或运算符将 bit2 和 bit3 位的值修改为 10

首先,使用指针 reg_addr 来指向该寄存器的地址,同样使用了 volatile 关键字来确保编译器不会对该寄存器的读写进行优化。

然后,使用按位与运算符 & 和按位取反运算符 ~ 将要修改的两个位清零。具体来说,0x3 << 2 表示二进制数 1100,将其取反得到 0011,然后使用按位与运算符将该值与原始寄存器值进行按位与运算,即可将 bit2 和 bit3 位清零。

最后,使用按位或运算符 | 将要修改的值与原始寄存器值进行按位或运算,将 bit2 和 bit3 位的值修改为 10。具体来说,0x2 << 2 表示二进制数 1000,左移 2 位得到 0010,然后将其与原始寄存器值进行按位或运算,即可将 bit2 和 bit3 位的值修改为 10。

需要注意的是,这里的代码仅仅是修改了寄存器的 bit2 和 bit3 两个位,如果需要修改其他位的值,需要根据具体情况进行修改。同时,为了保证修改寄存器的值不会对系统产生负面影响,需要了解该寄存器的具体作用和使用规范。

  • 方法2:
    还有一种比较简单的写法,可以使用位域来直接修改寄存器的值。具体实现如下:
// 将寄存器的 bit2 和 bit3 位从 11 修改为 10
volatile uint32_t *reg_addr = (volatile uint32_t *)0x12345678; // 假设寄存器地址为 0x12345678
struct {uint32_t bit0_1 : 2;uint32_t bit2_3 : 2;uint32_t bit4_31 : 27;
} *reg = (typeof(reg)) reg_addr;reg->bit2_3 = 0x2; // 直接将 bit2 和 bit3 位的值修改为 10

首先,定义一个包含三个位域的结构体,分别表示寄存器中的 bit01、bit23 和 bit4~31 三个部分。使用指针 reg 指向该寄存器的地址,并将其类型转换为该结构体类型。

然后,直接将 bit2~3 位的值修改为 10,使用结构体成员访问符 -> 访问 reg 结构体的 bit2_3 成员,并将其赋值为 0x2,即二进制数 10

需要注意的是,使用位域直接修改寄存器的值可能会受到编译器的优化影响,因此需要确保编译器不会对代码进行优化。同时,为了保证修改寄存器的值不会对系统产生负面影响,需要了解该寄存器的具体作用和使用规范。

  • 方法3:
    也可以使用位掩码和位移操作来修改寄存器的值,实现比较简单。具体实现如下:
// 将寄存器的 bit2 和 bit3 位从 11 修改为 10
volatile uint32_t *reg_addr = (volatile uint32_t *)0x12345678; // 假设寄存器地址为 0x12345678
uint32_t mask = 0x3 << 2; // 定义位掩码,表示要修改的 bit2 和 bit3 位
uint32_t value = 0x2 << 2; // 定义新的值,表示要将 bit2 和 bit3 位修改为 10
*reg_addr = (*reg_addr & ~mask) | value; // 使用按位与和按位或运算符将寄存器的值修改为新值

首先,使用指针 reg_addr 来指向该寄存器的地址。

然后,定义一个位掩码 mask,表示要修改的 bit2 和 bit3 位。具体来说,0x3 << 2 表示二进制数 1100,左移 2 位得到 0011,即表示要修改的 bit2 和 bit3 位。

接着,定义新的值 value,表示要将 bit2 和 bit3 位修改为 10。具体来说,0x2 << 2 表示二进制数 1000,左移 2 位得到 0100,即表示要将 bit2 和 bit3 位修改为 10。

最后,使用按位与运算符 &、按位取反运算符 ~ 和按位或运算符 | 将原始寄存器值与新值进行按位与和按位或运算,从而将 bit2 和 bit3 位的值修改为 10。具体来说,*reg_addr & ~mask 表示将寄存器中要修改的位清零,| value 表示将新值按位或运算到寄存器中要修改的位上。

需要注意的是,这里的代码仅仅是修改了寄存器的 bit2 和 bit3 两个位,如果需要修改其他位的值,需要根据具体情况进行修改。同时,为了保证修改寄存器的值不会对系统产生负面影响,需要了解该寄存器的具体作用和使用规范。

相关文章:

一个寄存器的bit2 bit3位由10修改成11,C示例

方法1&#xff1a; 如果需要将一个寄存器中的 bit2 和 bit3 两个位从 11 修改为 10&#xff0c;可以使用如下的 C 语言代码实现&#xff1a; // 将寄存器的 bit2 和 bit3 位从 11 修改为 10 volatile uint32_t *reg_addr (volatile uint32_t *)0x12345678; // 假设寄存器地址…...

【洛谷】P1631 序列合并

【洛谷】 P1631 序列合并 题目描述 有两个长度为 N N N 的单调不降序列 A , B A,B A,B&#xff0c;在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和&#xff0c;求这 N 2 N^2 N2 个和中最小的 N N N 个。 输入格式 第一行一个正整数 N N N&#xff1b; 第二…...

2023年七大最佳勒索软件解密工具

勒索软件是目前最恶毒且增长最快的网络威胁之一。作为一种危险的恶意软件&#xff0c;它会对文件进行加密&#xff0c;并用其进行勒索来换取报酬。 幸运的是&#xff0c;我们可以使用大量的勒索软件解密工具来解锁文件&#xff0c;而无需支付赎金。如果您的网络不幸感染了勒索软…...

prettier 命令行工具来格式化多个文件

prettier 命令行工具来格式化多个文件 你可以使用 prettier 命令行工具来格式化多个文件。以下是一个使用命令行批量格式化文件的示例&#xff1a; 安装 prettier 如果你还没有安装 prettier&#xff0c;你可以使用以下命令安装它&#xff1a; npm install -g prettier 进入…...

我发现了PMP通关密码!这14页纸直接背!

一周就能背完的PMP考试技巧只有14页纸 共分成了4大模块 完全不用担心看不懂 01关键词篇 第1章引论 1.看到“驱动变革”--选项中找“将来状态” 2.看到“依赖关系”--选项中找“项目集管理” 3.看到“价值最大化”--选项中找“项目组合管理” 4.看到“可行性研究”--选项中…...

Medical X-rays Dataset汇总(长期更新)

目录​​​​​​​ ChestX-ray8 ChestX-ray14 VinDr-CXR VinDr-PCXR ChestX-ray8 ChestX-ray8 is a medical imaging dataset which comprises 108,948 frontal-view X-ray images of 32,717 (collected from the year of 1992 to 2015) unique patients with the text-mi…...

一文告诉你如何做好一份亚马逊商业计划书的框架

“做亚马逊很赚钱”、“我也来做”、“哎&#xff0c;亏钱了”诸如此类的话听了实在是太多。亚马逊作为跨境电商老大哥&#xff0c;许多卖家还是对它怀抱着很高的期许。但是&#xff0c;事实的残酷的。有人入行赚得盆满钵盈&#xff0c;自然也有人亏得血本无归。 会造成这种两…...

原来ChatGPT可以充当这么多角色

充当 Linux 终端 贡献者&#xff1a;f 参考&#xff1a;https ://www.engraved.blog/building-a-virtual-machine-inside/ 我想让你充当 linux 终端。我将输入命令&#xff0c;您将回复终端应显示的内容。我希望您只在一个唯一的代码块内回复终端输出&#xff0c;而不是其他任…...

数据结构_第十三关(3):归并排序、计数排序

目录 归并排序 1.基本思想&#xff1a; 2.原理图&#xff1a; 1&#xff09;分解合并 2&#xff09;数组比较和归并方法&#xff1a; 3.代码实现&#xff08;递归方式&#xff09;&#xff1a; 4.归并排序的非递归方式 原理&#xff1a; 情况1&#xff1a; 情况2&…...

“成功学大师”杨涛鸣被抓

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 4月15日&#xff0c;号称帮助一百多位草根开上劳斯莱斯&#xff0c;“成功学大师”杨涛鸣机其团队30多人已被刑事拘留&#xff0c;培训课程涉嫌精神传销&#xff0c;警方以诈骗案进行立案调查。 …...

【hello C++】内存管理

目录 前言&#xff1a; 1. C/C内存分布 2. C语言动态内存管理方式 3. C内存管理方式 3.1 new / delete 操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 4.1 operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2…...

AppArmor零知识学习十二、源码构建(9)

本文内容参考&#xff1a; AppArmor / apparmor GitLab 接前一篇文章&#xff1a;AppArmor零知识学习十一、源码构建&#xff08;8&#xff09; 在前一篇文章中完成了apparmor源码构建的第六步——Apache mod_apparmor的构建和安装&#xff0c;本文继续往下进行。 四、源码…...

Unity - 带耗时 begin ... end 的耗时统计的Log - TSLog

CSharp Code // jave.lin 2023/04/21 带 timespan 的日志 &#xff08;不帶 log hierarchy 结构要求&#xff0c;即&#xff1a; 不带 stack 要求&#xff09;using System; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine;public…...

Python 智能项目:1~5

原文&#xff1a;Intelligent Projects Using Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关心如何实…...

C++设计模式:面试题精选集

目录标题 引言&#xff08;Introduction&#xff09;面试的重要性设计模式概述面试题的选择标准 设计模式简介 面试题解析&#xff1a;创建型模式&#xff08;Creational Patterns Analysis&#xff09;面试题与解答代码实例应用场景分析 面试题解析&#xff1a;结构型模式&…...

蓝桥 卷“兔”来袭编程竞赛专场-10仿射加密 题解

赛题介绍 挑战介绍 仿射密码结合了移位密码和乘数密码的特点&#xff0c;是一种替换密码。它是利用加密函数一个字母对一个字母的加密。加密函数是 yaxb(mod m) &#xff0c;且 a,b∈Zm &#xff08;a、b 的值在 m 范围内&#xff09;&#xff0c;且 a、m 互质。 m 是字符集的…...

android so库导致的闪退及tombstone分析

android中有3种crash情况&#xff1a;未捕获的异常、ANR和闪退。未捕获的异常一般用crash文件就可以记录异常信息&#xff0c;而ANR无响应表现就是界面卡着无法响应用户操作&#xff0c;而闪退则是整个app瞬间退出&#xff0c;个人感觉对用户造成的体验最差。闪退一般是由于调用…...

图结构基本知识

图 1. 相关概念2. 图的表示方式3. 图的遍历3.1 深度优先遍历&#xff08;DFS&#xff09;3.2 广度优先遍历&#xff08;BFS&#xff09; 1. 相关概念 图G(V,E) &#xff1a;一种数据结构&#xff0c;可表示“多对多”关系&#xff0c;由顶点集V和边集E组成&#xff1b;顶点(ve…...

Hibernate 的多种查询方式

Hibernate 是一个开源的 ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它可以将 Java 对象映射到数据库表中&#xff0c;实现对象与关系数据库的映射。Hibernate 提供了多种查询方式&#xff0c;包括 OID 检索、对象导航检索、HQL 检索、QBC 检索和 SQL 检索。除此…...

FreeRTOS 任务调度及相关函数详解(一)

文章目录 一、任务调度器开启函数 vTaskStartScheduler()二、内核相关硬件初始化函数 xPortStartScheduler()三、启动第一个任务 prvStartFirstTask()四、中断服务函数 xPortPendSVHandler()五、空闲任务 一、任务调度器开启函数 vTaskStartScheduler() 这个函数的功能就是开启…...

Excel MCP Server终极指南:3步实现无界面Excel自动化处理

Excel MCP Server终极指南&#xff1a;3步实现无界面Excel自动化处理 【免费下载链接】excel-mcp-server A Model Context Protocol server for Excel file manipulation 项目地址: https://gitcode.com/gh_mirrors/ex/excel-mcp-server 你是否厌倦了手动操作Excel的繁琐…...

如何3步免费解锁WeMod专业版:2026年终极增强工具使用指南

如何3步免费解锁WeMod专业版&#xff1a;2026年终极增强工具使用指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的订阅费用而犹豫…...

终极Python通达信数据解析方案:mootdx完整使用指南与金融量化实践

终极Python通达信数据解析方案&#xff1a;mootdx完整使用指南与金融量化实践 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 在金融数据分析和量化交易领域&#xff0c;通达信作为国内主流的证券…...

地下态势智能研判,拔高硐室深部安全透明管控等级技术白皮书

地下态势智能研判&#xff0c;拔高硐室深部安全透明管控等级技术白皮书 副标题&#xff1a;全要素三维动态重建井下场景&#xff0c;融合井下无感坐标解算、跨断面跨镜轨迹串联、身体指纹人员轨迹存档&#xff0c;井下风险前置感知、动态全程透明追溯 前言 矿山井下深部硐室与纵…...

Arm CoreLink PCK-600电源管理架构与寄存器编程详解

1. Arm CoreLink PCK-600电源控制架构解析在嵌入式系统设计中&#xff0c;电源管理单元&#xff08;PMU&#xff09;是实现高效能耗控制的核心组件。Arm CoreLink PCK-600作为业界领先的电源控制解决方案&#xff0c;其架构设计体现了现代SoC电源管理的先进理念。PCK-600系列采…...

模拟WiFi反向散射技术:无电池物联网通信新突破

1. 项目概述&#xff1a;模拟WiFi反向散射技术的革新突破在物联网设备爆炸式增长的今天&#xff0c;电池续航已成为制约大规模部署的关键瓶颈。传统传感器节点即使采用低功耗设计&#xff0c;其电池寿命也鲜有超过3-5年。而Leggiero提出的模拟WiFi反向散射技术&#xff0c;则开…...

Arm Neoverse-V2/V3缓存与内存参数优化指南

1. Arm Neoverse-V2/V3集群架构概述Arm Neoverse系列处理器作为数据中心和基础设施领域的重要计算引擎&#xff0c;其V2/V3代架构在缓存子系统和内存管理方面进行了显著优化。作为从业多年的系统架构师&#xff0c;我认为理解这些处理器的参数配置对性能调优至关重要。Neoverse…...

别再一个点一个点更新了!用Python手把手实现分块LMS(BLMS)滤波器,收敛稳如老狗

用Python实现分块LMS滤波器&#xff1a;告别收敛震荡的工程实践指南 在实时信号处理领域&#xff0c;自适应滤波器的稳定性往往比理论性能更重要。想象一下这样的场景&#xff1a;你正在开发一套会议系统降噪算法&#xff0c;每次麦克风捕捉到新的声音样本&#xff0c;滤波器系…...

如何用FontForge从零设计专业字体?揭秘字体编辑器的核心玩法

如何用FontForge从零设计专业字体&#xff1f;揭秘字体编辑器的核心玩法 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 想象一下&#xff0c;你手写的签名、设计的l…...

STM32嵌入式开发入门:从硬件配置到项目实战的完整学习路径

1. 项目概述&#xff1a;从零到一&#xff0c;如何构建你的STM32知识体系很多刚接触嵌入式开发的朋友&#xff0c;拿到一块STM32开发板&#xff0c;看着满屏的英文手册和复杂的库函数&#xff0c;第一反应往往是“从哪开始&#xff1f;”。这感觉就像面对一座零件齐全但没图纸的…...