(*(volatile unsigned int *))详解

2023-10-27

使用一个32位处理器,要对一个32位的内存地址进行访问,可以这样定义

#define RAM_ADDR (*(volatile unsigned long *)0x00000000)

然后就可以用C语言对这个内存地址进行读写操作了

读:

tmp = RAM_ADDR;

写:

RAM_ADDR = 0x55;

volatile的意思是说明这个变量是可能被别的程序或者本程序的其他线程修改的,这样编译器就不能优化它,每次读取都从地址中获取。如果不这样声明的话编译器可以把它缓冲在寄存器中的,这样别的程序修改了它,而寄存器里面的值却是原先的,会发生你不想要的结果。而上面三种情况都是这种可能在本程序或者本线程外被修改的情况,所以要加它。

注意几点:
1.(volatile unsigned long *)0x00000000 说明是一个指针类型,地址在0x00000000
2.在前面加上个*,表示指向这个地址的内容。
3.养成在整体外面再加个括号的习惯。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(*(volatile unsigned int *))详解 的相关文章

  • 图像超分辨率重建概述

    1 概念 图像分辨率是一组用于评估图像中蕴含细节信息丰富程度的性能参数 包括时间分辨率 空间分辨率及色阶分辨率等 体现了成像系统实际所能反映物体细节信息的能力 相较于低分辨率图像 高分辨率图像通常包含更大的像素密度 更丰富的纹理细节及更高的
  • 怎么看linux系统版本号?

    1获取内核版本号 2个办法 1 cat proc version 2 uname a samba centos share uname a Linux centos 3 10 0 957 5 1 el7 x86 64 1 SMP Fri F
  • Java类与对象学习小结

    标题 Java类与对象学习小结 知识点 1 一个类可以包含以下事物 局部变量 写在类中的方法或者函数中声明的变量 只有在此方法中才能被使用 在同一个类中的其他方法中却不能使用 全局变量 在一个类中直接声明的 可以在这个类中所用方法中使用 类

随机推荐

  • Ubuntu20.04修复网络不显示问题

    Ubuntu20 04修复网络不显示问题 当我们在使用Ubuntu系统时 可能由于某项配置没有设置好 或者关闭 挂起系统时出现错误 导致再次打开Ubuntu系统时会没有网络显示 通过其他前辈的方法指导 本人亲测目前一直在用的方法 个人测试U
  • ue4 3dui交互相关

    1 建立3d ui 新建一个Actor蓝图 上面加上Widget控件 widget Class选择任意ui蓝图 把这个actor蓝图放到场景任意合适位置 2 3dui交互 在合适位置 比如主角的相机上 武器上 添加Widget Intera
  • 如何处理亿级图片排重(精准排重,相似排重)

    图片相似度对比 1 需求 假如有一个图片池 存有1亿图片 给一张目标图片 在图片池中做匹配 判断一张图片是否在图片池中出现过 完全一样 判断有没有相似的出现过 比如两张图相似度90 两张图片是在描述一件事情 2 需求实现方案 对于以上需求
  • 大数据集群搭建(七)——Hbase-2.2.3安装

    Hbase 2 2 3安装 下载hbase 2 2 3压缩包 将文件上传到dn1节点 pkg目录下 执行以下命令 分别在dn1 dn2 dn3三台节点安装 解压到 opt目录 tar zxvf hbase 2 2 3 bin tar gz
  • MYSQL jdbc autoReconnect

    http blog csdn net a9529lty article details 7104351 http blog 163 com huangfei person blog static 5815667520109291150780
  • CSAPP-深入理解计算机系统-task01计算机系统漫游

    计算机系统漫游 上 1 hello world程序的创建 运行 退出的流程 hello world程序从编写到最终执行结束需要经过下面这4个步骤 创建 create 编译 compile 运行 run 退出 exit 创建的代码如下 保存为
  • JS基础之String对象的常用方法

  • 【Git】Git commit push的时候出现了两个分支

    1 背景 是这样的 新建了一个项目 然后第一次提交到git的时候因为卡住了 然后我就关掉了IDEA 然后重新打开后提交就可以了 但是却在整个项目提交的时候出现了两个一样的分支 不一样的文件夹 而且提交到远程的时候 发现web文件夹是空的 不
  • Java SpringBoot框架面试题(入门必看)

    目录 一 SpringBoot 二 Linux 三 Redis 前言 在熟悉SpringBoot框架面试题前 需要掌握Spring家族等ssm框架的面试题 有需要的小伙伴可以翻看下面小编的这篇博客 Java SSM框架面试题 删繁就简 系统
  • 【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 大家好 我是佛系工程师 恬静的小魔龙 不定时更新Unity开发技巧 觉得有用记得一键三连哦 一 前言 本篇文章实现Unity3D打包WEBGL后播
  • vscode中怎样格式化js代码_Vue-cli Eslint在vscode里代码自动格式化的方法

    编辑器另外一个很重要的功能就是代码格式化了 vs code默认提供常见文件的格式化 如 js html等 添加对 vue文件的格式化支持 这里我们添加对 vue 文件的格式化支持 1 安装 vetur 插件 2 在 vs code 的设置中
  • WordPress所有Dashicons图标样式和用法

    Dashicons是WordPress官方出品的用于后台的图标样式 主要用在后台右侧菜单的图标 当我们自己开发和改造后台的时候非常实用 下面列出了所有的图标 方便开发后台时使用 经常使用的两个函数是 register post type 和
  • react 16.7 hooks - effect 详解

    Effect Hook可以使得你在函数组件中执行一些带有副作用的方法 import useState useEffect from react function Example const count setCount useState 0
  • gauge自动化框架踩坑(四):在测试报告中自定义messages

    在开始之前 我觉得很有必要介绍一下print和logger 因为平时调试用的最多的就是print和看日志 当然可以打断点调试 但是我不太习惯用这个 一 print gauge控制台输出到底支不支持print 其实自己可以写个demo 看来确
  • 如何查看小程序的APPID和AppSecret

    小程序APPID可以在手机上打开小程序后 点击右上角三点 然后点击中间位置的小程序名称 进入小程序介绍页面 点击 更多资料 后 进入页面就可以看到上方有APPID 另一种方法 在微信公众平台登录自己的小程序账号 微信公众平台 在开发管理 开
  • Python基础教程,Python入门教程(超详细)

    Python由荷兰数学和计算机科学研究学会 于1990 年代初设计 作为一门叫做ABC语言的替代品 Python语法和动态类型 以及解释型语言的本质 使它成为多数平台上写脚本和快速开发应用的编程语言 目录 为什么使用Python Pytho
  • 微信小程序授权获取用户详细信息openid

    小程序获取用户的头像昵称openid之类 第一种使用wx getUserInfo直接获取微信头像 昵称 wx getUserInfo success function res that setData nickName res userIn
  • JSP基础详解

    目录 一 JSP简介 二 JSP的本质 三 JSP页面元素 1 JSP指令 2 JSP小脚本 3 JSP表达式 4 声明脚本 5 注释 四 JSP的执行过程 四 JSP九大内置对象 五 JSP四大域对象 六 JSP中的include标签 一
  • 【JVM · 调优】监控及诊断工具

    一 概述 1 背景说明 1 1 生产环境中的问题 生产环境发生了内存溢出该如何处理 生产环境应该给服务器分配多少内存合适 如何对垃圾回收器的性能进行调优 生产环境CPU负载飙高该如何处理 生产环境应该给应用分配多少线程合适 不加log 如何
  • (*(volatile unsigned int *))详解

    使用一个32位处理器 要对一个32位的内存地址进行访问 可以这样定义 define RAM ADDR volatile unsigned long 0x00000000 然后就可以用C语言对这个内存地址进行读写操作了 读 tmp RAM A