当前位置: 首页 > 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() 这个函数的功能就是开启…...

基于MATLAB的图像加密解密系统 可以正确无误的对图像进行加密和解密 带GUI界面

基于MATLAB的图像加密解密系统 可以正确无误的对图像进行加密和解密 带GUI界面&#xff0c;一步一步完整运行你是否有过这样的疑问——如何让一张普通图片变成外星密文&#xff1f;在MATLAB里玩转图像加密真的可以像搭积木一样简单。今天咱们就来捣鼓一个带界面的图像加密系统&…...

从零开始:Linux系统部署AI视频生成工具Sora.FM的实战指南

从零开始&#xff1a;Linux系统部署AI视频生成工具Sora.FM的实战指南 【免费下载链接】sorafm 项目地址: https://gitcode.com/GitHub_Trending/so/sorafm 在数字化内容创作领域&#xff0c;AI视频生成技术正在引领一场新的革命。Sora.FM作为基于Sora AI技术的创新平台…...

.NET 11 预览版1:CoreCLR 在 WebAssembly 上的全面集成与性能突破

摘要随着.NET 11 Preview 1 的正式发布&#xff0c;.NET 生态系统迎来了一次具有分水岭意义的基础架构演进。本次发布的核心亮点在于.NET 的 CoreCLR 运行时现在已经能够原生运行在 WebAssembly (WASM) 平台上。这是一个重大的技术突破&#xff0c;标志着微软在跨平台战略上的全…...

FPGA开发实战——常见错误排查与优化技巧(持续更新)

1. Vivado仿真与PR Flow冲突问题实战解析 第一次用Vivado做PR&#xff08;Partial Reconfiguration&#xff09;项目时&#xff0c;我兴冲冲地点开仿真按钮&#xff0c;结果弹出一个让人崩溃的报错&#xff1a;"ERROR [Common 17-69] Command failed. Simulation for PR F…...

用PyTorch从零搭建U-Net:手把手教你搞定遥感图像分割(附完整代码)

用PyTorch从零搭建U-Net&#xff1a;手把手教你搞定遥感图像分割&#xff08;附完整代码&#xff09; 遥感图像分割是计算机视觉领域的重要应用方向&#xff0c;尤其在农业监测、城市规划、灾害评估等场景中发挥着关键作用。对于刚接触深度学习实践的开发者来说&#xff0c;从…...

避坑指南:在CodeSys里用three.js加载3D模型,我踩过的那些安全策略和路径坑

CodeSys集成three.js的实战避坑手册&#xff1a;从安全策略到模型加载的完整解决方案 在工业自动化领域&#xff0c;可视化界面正经历着从传统2D向3D交互的转型。当我在最近一个机械臂控制项目中尝试将three.js集成到CodeSys WebVisu环境时&#xff0c;原以为简单的任务却遭遇…...

Shopee风控算法逆向 - Unidbg补环境实战解析

1. Shopee风控算法逆向分析入门 最近在研究Shopee的风控机制时&#xff0c;我发现他们的Native层加密算法特别有意思。作为一个常年和移动安全打交道的开发者&#xff0c;今天想和大家分享下使用Unidbg模拟执行Shopee风控算法的完整过程。 Shopee作为东南亚头部电商平台&…...

nlp_structbert模型助力AIGC内容审核:生成文本与违规库相似度比对

nlp_structbert模型助力AIGC内容审核&#xff1a;生成文本与违规库相似度比对 1. 引言&#xff1a;当AIGC内容爆发&#xff0c;审核成了大难题 最近两年&#xff0c;AIGC技术发展得太快了。无论是写文章、做设计&#xff0c;还是生成营销文案&#xff0c;AI工具已经渗透到内容…...

PyTorch Geometric安装避坑指南:从依赖冲突到版本匹配,手把手带你搞定PyG环境

PyTorch Geometric安装避坑指南&#xff1a;从依赖冲突到版本匹配 每次打开终端准备安装PyTorch Geometric&#xff08;PyG&#xff09;时&#xff0c;那种既期待又忐忑的心情&#xff0c;相信很多图神经网络&#xff08;GNN&#xff09;开发者都深有体会。明明按照官方文档一…...

Mirage Flow与Python爬虫结合:智能数据采集与分析实战

Mirage Flow与Python爬虫结合&#xff1a;智能数据采集与分析实战 1. 引言 你有没有遇到过这样的情况&#xff1a;需要从大量网站采集数据&#xff0c;但传统爬虫要么被封IP&#xff0c;要么无法处理复杂的页面结构&#xff0c;要么采集回来的数据杂乱无章需要大量清洗&#…...