(*((volatile unsigned long *) 0xE0028000)) 作用小解

2023-05-16

#define IO0PIN          (*((volatile unsigned long *) 0xE0028000))      /* no in lpc210x*/

以此句为例,简述如下:

与51单片机的头文件<reg51.h>类似,在ARM处理器中,也必须有自己的寄存器头文件声明,不同的是,在ARM应用中,需要用户自己来编写.

0xE0028000:在ARM处理器中,只能识别为一个十六进制数值,具体是数据还是地址,它并不能自动区分.

而使用(volatile unsigned int *)0xE0028000,对此数据进行强制转换,表明此数值为一个无符号的长整型地址指针值,关键字volatile 告诉编译器它指向的内容是易变的,可能会被硬件等意外地修改.这一点很关键.

*((volatile unsigned int *) 0xFFE00000),则是获取指针所指向地址处的内容,从而,使用了#define 预处理语句对IO0PIN进行定义后,在用户程序中,对IO0PIN的操作,就等同于在0xE0028000地址上进行读写操作.

具体C语言的知识,请参考相关书籍.如果平时在学习中遇到ARM相关的问题,也可以登陆以下网页:

http://www.zlgmcu.com.cn/index.asp?boardid=29&page=1

volatile 主要用于变量会异步改变的情况下,主要有三个方面:

1.cpu外设寄存器

2.中断和主循环都会用到的全局变量

3.操作系统中的线程间都会用到的公共变量.



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

(*((volatile unsigned long *) 0xE0028000)) 作用小解 的相关文章

  • 为什么将函数参数标记为易失性

    我目前正在阅读PostgreSQL https github com postgres postgres代码 以下是缓冲区管理器的摘录 static void WaitIO volatile BufferDesc buf static bo
  • 为什么 std::streamsize 定义为有符号而不是无符号?

    根据http en cppreference com w cpp io streamsize http en cppreference com w cpp io streamsize std streamsize 类型是有符号整型 用于表示
  • 如何在 C++ 中将使用 malloc 创建的数组声明为易失性

    我认为下面会给我 10 个易失性整数 volatile int foo 10 但是 我不认为以下内容会做同样的事情 volatile int foo foo malloc sizeof int 10 如果我对此以及如何使用 malloc 拥
  • Java在C中的易失性?

    我知道使用volatile在爪哇 即 基于维基百科文章 http en wikipedia org wiki Volatile variable 对易失性对象的读取和写入存在全局顺序 多变的 这意味着每个访问易失性字段的线程 将在继续之前读
  • 信号如何与序列点交互?

    C89 标准规定 At sequence points volatile objects are stable in the sense that previous evaluations are complete and subseque
  • 将 String 类型引用标记为 Volatile 安全吗?

    我读过一些帖子和文章说我们不应该将java对象声明为易失性的 因为这样一来 只有引用变得易失性 这里有些例子 link 1 https stackoverflow com questions 15487544 declaring an ob
  • 当我将负值赋给 unsigned int 时会发生什么? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的有符号到无符号转换 它总是安全的吗 https stackoverflow com questions 50605 signed to unsigned conversion in c is
  • 同步跨线程共享的对象,但不能同时访问

    假设我有一个带有字段的共享对象data 多个线程将共享对此对象的引用以便访问该字段 不过 线程永远不会同时访问该对象 我需要声明吗data不稳定 这种情况如下 A class Counter定义一个唯一的字段value和一种方法increm
  • 无符号负基元?

    在 C 中我们可以创建原语unsigned 但他们总是积极的 还有一种方法可以生成无符号负变量吗 我知道 无符号 这个词的意思是 没有符号 所以也不是减号 但我认为C 必须提供它 No unsigned只能包含非负数 如果您需要一个仅表示负
  • “快速路径”无竞争同步是什么意思?

    来自性能和可扩展性的章节JCIP书籍 http jcip net s3 website us east 1 amazonaws com 同步机制针对无竞争的情况进行了优化 case 易失性始终是无争议的 在撰写本文时 快速路径 无竞争同步范
  • EventWaitHandle 是否有任何隐式 MemoryBarrier?

    我是这个网站的新手 所以如果我没有以可接受的方式发帖 请告诉我 我经常按照下面的示例编写一些代码 为了清楚起见 省略了诸如 Dispose 之类的内容 我的问题是 是否需要如图所示的挥发物 或者 ManualResetEvent Set 是
  • 为什么 1ul << 64 返回 1 而不是 0? [复制]

    这个问题在这里已经有答案了 考虑下面的代码 Simply loop over until 64 is hit unsigned long x 0 for int i 0 i lt 64 i if i 64 x 1ul lt lt i pri
  • 如果变量在线程之间共享,将变量标记为易失性是否有用? [复制]

    这个问题在这里已经有答案了 Notice 显然我没能向这里的每个人清楚地表达我的观点 这令人难以置信的沮丧 我的目标是消除这样的神话volatile实际上是一个空操作 它什么也不做 我并不是想声明它应该被使用 它是必要的 它不是多余的等等
  • Java 中的无符号短整型

    我怎样才能声明unsigned shortJava 中的值 你不能 真的 Java 没有任何无符号数据类型 除了char 诚然你could use char 这是一个 16 位无符号类型 但在我看来这将是可怕的 因为char显然适用于文本
  • “易失性”在线程之间同步变量

    我有一个变量int foo从两个线程访问 假设我没有竞争条件问题 访问受互斥体保护 所有操作都是原子的 或者任何其他方法来防止竞争条件 仍然存在 寄存器缓存 的问题 因为缺乏更好的名称 其中编译器可能会假设如果变量被读取两次而没有在中间写入
  • Java - 易失性的使用仅在多处理器系统中有意义?

    易失性的使用仅在多处理器系统中才有意义 这是错误的吗 我正在尝试学习线程编程 所以如果你知道任何好的文章 pdf 我喜欢提到一些关于操作系统如何工作的东西 而不仅仅是语言的语法 否 挥发性可用于多线程应用程序 它们可能会也可能不会在多个处理
  • 成员函数什么时候应该同时是 const 和 volatile ?

    我正在阅读有关易失性成员函数的内容 并发现成员函数可以同时是const 和 volatile 在一起 我没有得到这样的东西的真正用途 任何人都可以分享他们的经验吗实际使用将成员函数同时用作 const 和 volatile 我编写了小类来测
  • C 易失性变量和高速缓存

    缓存是由缓存硬件对处理器透明地控制的 因此如果我们在C程序中使用易失性变量 如何保证我的程序每次都从指定的实际内存地址读取数据而不是缓存 我的理解是 Volatile 关键字告诉编译器不应优化变量引用 而应按照代码中的编程方式读取变量引用
  • 如何停止优化器丢弃未使用的变量?

    我想调试我的代码 但无法访问进程中的内部层 因为这会干扰与硬件的通信 在监视列表会干扰基本读取访问的情况下执行易失性操作 因此 我正在测试接口的返回值 但 IAR 编译器甚至会优化未使用的易失性变量 和这样的声明 i object foo
  • 通过易失性引用/指针访问声明的非易失性对象是否会为所述访问赋予易失性规则?

    这将是一篇很长的文章 为了将其置于上下文中并提供尽可能多的信息 我必须浏览各种链接和引用 这通常是我们进入 C C 标准兔子洞的唯一方法 如果您对这篇文章有更好的引用或任何其他改进 请告诉我 但先总结一下 你可以责怪 zwol对我来说发布这

随机推荐

  • qt程序的CMakeLists.txt配置转为平台的qt的.pro项目工程文件

    参考这个 跨平台qt程序的CMakeLists txt配置转为平台的qt的 pro项目工程文件 谁能懂我2011的博客 CSDN博客 一些比较正规的跨平台qt项目没有 pro项目文件只有CMakeLists txt文件 xff0c 如果要编
  • 单片机堆栈是什么?它的原理和作用又是什么?

    什么是单片机堆栈 xff1f 在片内RAM中 xff0c 常常要指定一个专门的区域来存放某些特别的数据 它遵循顺序存取和后进先出 LIFO FILO 的原则 这个RAM区叫堆栈 它的作用 子程序调用和中断服务时CPU自动将当前PC值压栈保存
  • IMU(陀螺仪、加速度计)&Magnetometer(磁力计)校准方法和流程

    一 何为校准 xff1a 校准的目的是因为厂商在生产器件时 xff0c 由于工艺 技术等原因 xff0c 致使器件存在缺陷 xff0c 导致实际应用时 xff0c 存在误差 xff01 一般器件在出厂时 xff0c 都会做一些校准处理 xf
  • matlab运行RTKDEMO几个小函数

    一 matlab函数 xff1a 1 datenum 将时间点转换为0000年1月0日到现在的天数 xff01 其中起点为 xff1a 0000年1月0日 例如 xff1a K gt gt t0 61 datenum 2005 4 2 0
  • 糖儿飞教你学C++ Socket网络编程——8. 异步通信版的TCP通信程序

    项目3 3中实现的通信程序仍然有很多不足 xff0c 最明显的不足是 xff0c 通信双方不能自动接收对方消息 xff0c 需要单击 接收 按钮才能接收 另外的问题是 xff0c 在服务器端单击 创建服务器 按钮后 xff0c 如果没有客户
  • VINS-Mono

    文章目录 初始化框架缺点ORB SLAM的Local Map VINS的滑窗 逐次逼近式去畸变给后端提供的特征点信息光流追踪对极约束F去除外点 rejectWithF 特征点均匀化预积分系统初始化初始化时不校正bias a误差卡尔曼滤波误差
  • python-异常

    https docs python org 3 library exceptions html 异常 程序在运行过程中 xff0c 不可避免的出现一些错误 没有赋值的变量使用了不存在的索引除0 这些错误在程序中 xff0c 称为异常程序运行
  • STM32CubeMX串口USART中断发送接收数据

    本文代码使用 HAL 库 文章目录 前言一 中断控制二 USART中断使用1 中断优先级设置 xff1a 2 使能中断3 使能UART的发送 接收中断4 中断收发函数5 中断处理函数6 中断收发回调函数 三 串口中断实验串口中断发送数据点亮
  • 关于gcc、make和CMake的区别

    CMake是一种跨平台编译工具 xff0c 比make更为高级 xff0c 使用起来要方便得多 CMake主要是编写CMakeLists txt文件 xff0c 然后用cmake命令将CMakeLists txt文件转化为make所需要的m
  • gcc与g++的区别

    一 编译的四个阶段 预处理 xff1a 编译处理宏定义等宏命令 xff08 eg define xff09 生成后缀为 i 的文件 编译 xff1a 将预处理后的文件转换成汇编语言 生成后缀为 s 的文件 汇编 xff1a 由汇编生成的文件
  • 网络编程第一篇之Select模式

    网络编程第一篇之Select模式 今天总结下Select模式下网络编程模型 xff0c 首先我们要知道一个高级的技术 xff0c 绝对不是凭空产生的 xff0c 它一定是在原来的技术上由于满足不了需求 xff0c 然后经过不断的打磨 xff
  • 佛学八正道

    八正道包括正见 正思惟 正语 正业 正命 正精进 正念 正定 大毘婆娑论 说 xff1a 由正见故 xff0c 起正思惟 xff1b 由正思惟故 xff0c 得正语 xff1b 由正语故 xff0c 复得正业 xff1b 由正业故 xff0
  • C语言疑难点汇总解析

    1 大小端知识点 1 1 大小端定义 1 Little Endian就是低位字节排放在内存的低地址端 xff0c 高位字节排放在内存的高地址端 2 Big Endian就是高位字节排放在内存的低地址端 xff0c 低位字节排放在内存的高地址
  • 常见硬件接口汇总(未完待续)

    1 UART 通用异步收发器 xff0c 用于收发数据的串并转换 2 I2C 双线串行接口 3 I3C 4 SCI SIM卡接口 xff0c 接在APB总线上 xff0c 用于与外部读卡器通信 实际也是串并转换的通信方式 5 CSI 6 P
  • 芯片的ATE测试简介

    ATE xff1a Automatic Test Equipment xff0c 即自动测试设备 xff0c 它用于芯片大规模生产测试 xff0c 保障稳健 xff08 质量 成本和进度 xff09 的供应 ATE测试基本的覆盖理念 xff
  • Android发展历程

    发展历程 2003年10月 xff0c Andy Rubin等人创建Android公司 xff0c 并组建Android团队 2005年8月17日 xff0c Google低调收购了成立仅22个月的高科技企业Android及其团队 安迪鲁宾
  • Android系统源码目录详解

    关于源码的阅读 xff0c 你可以访问 xff1a http androidxref com 我们要先了解Android系统源码目录 xff0c 为后期源码学习打下基础 当然 xff0c 最好是将源码下载下来 下载源码可以使用清华大学开源软
  • 使用Iperf工具测试WiFi的吞吐量

    1 windows 上测试网路吞吐量工具 对于window测试网络吞吐量的工具 http download csdn net download leekwen 3427386 iperf windows版测试软件 针对wifi性能进行测试
  • C++封装的HTTP和HTTPS的接口

    记录下http和https的post方法 在C 43 43 中实现 来源无从考究了 xff0c 这里记录一下 http 的post 方法 BOOL HttpPostToBusinessServer LPCTSTR serverAddr st
  • (*((volatile unsigned long *) 0xE0028000)) 作用小解

    define IO0PIN volatile unsigned long 0xE0028000 no in lpc210x 以此句为例 简述如下 与51单片机的头文件 lt reg51 h gt 类似 在ARM处理器中 也必须有自己的寄存器