a= *(volatile u8 *)0x0000 0020

a= *(volatile u8 *)0x00000020中 0x0000_0020是32位的。

整体含义 :将内存地址 0x00000020 处的8位无符号值读取出来,并赋值给变量 a

(volatile u8 *) 是一种类型转换,用于将一个值转换为指向 volatile u8 类型的指针。在C和C++编程中,这种语法通常用于直接访问特定的内存地址,尤其在嵌入式系统或底层硬件编程中非常常见。

同时,也能通过*(volatile u8 *) = 0x12,对该地址写入数据。

volatile

在C语言中,volatile 是一个关键字,用于告诉编译器某个变量的值可能会在程序的控制之外被改变。它通常被用在嵌入式编程中,与硬件寄存器、内存映射区域或者信号处理等相关的代码中。

volatile 的作用

volatile 告诉编译器:

  1. 禁止优化 :不要对带有 volatile 的变量进行优化,必须每次访问都从内存中读取或写入,而不能使用寄存器缓存等方式。
  2. 防止指令重排序 :编译器不能调整对 volatile 变量的访问顺序,以确保按照程序代码的顺序执行。
相关推荐
Seven9713 小时前
剑指offer-37、数字在升序数组中出现的次数
java
SimonKing13 小时前
还在为HTML转PDF发愁?再介绍两款工具,为你保驾护航!
java·后端·程序员
龙泉寺天下行走13 小时前
[Powershell入门教程]第4天:模块、脚本编写、错误处理与 .NET 集成
java·服务器·前端
aniden13 小时前
Swagger从入门到实战
java·开发语言·spring
孙同学_13 小时前
【Linux篇】信号机制深度剖析:从信号捕捉到SIGCHLD信号处理
linux·信号处理
泥嚎泥嚎13 小时前
【Android】给App添加启动画面——SplashScreen
android·java
Java天梯之路13 小时前
09 Java 异常处理
java·后端
玖剹13 小时前
多线程编程:从日志到单例模式全解析
java·linux·c语言·c++·ubuntu·单例模式·策略模式
一 乐13 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·小程序
下午见。13 小时前
【C语言学习笔记】动态内存分配:malloc/free的正确打开方式
c语言·笔记·学习