(转)volatile 的理解
2024-08-29 12:41:22
对于(volatile unsigned char *)0x20我们再分析一下,它是由两部分组成:
1) (unsigned char *)0x20,0x20只是个值,前面加(unsigned char *)表示0x20是个地址,而且这个地址类型是unsigned char ,
意思是说读写这个地址时,要写进unsigned char 的值,读出也是unsigned char 。
2) volatile,关键字volatile 确保本条指令不会因C 编译器的优化而被省略,且要求每次直接读值。例如用while((unsigned char *)0x20)时,
有时系统可能不真正去读0x20的值,而是用第一次读出的值,如果这样,那这个循环可能是个死循环。用了volatile 则要求每次都去读0x20的实
际值。
那么(volatile unsigned char *)0x20是一个固定的指针,是不可变的,不是变量。而char *u则是个指针变量。
再在前面加"*":*(volatile unsigned char *)0x20则变成了变量(普通的unsigned char变量,不是指针变量),
如果#define i (*(volatile unsigned char *)0x20),那么与unsigned char i是一样了,只不过前面的i的地址是固定的。
1) (unsigned char *)0x20,0x20只是个值,前面加(unsigned char *)表示0x20是个地址,而且这个地址类型是unsigned char ,
意思是说读写这个地址时,要写进unsigned char 的值,读出也是unsigned char 。
2) volatile,关键字volatile 确保本条指令不会因C 编译器的优化而被省略,且要求每次直接读值。例如用while((unsigned char *)0x20)时,
有时系统可能不真正去读0x20的值,而是用第一次读出的值,如果这样,那这个循环可能是个死循环。用了volatile 则要求每次都去读0x20的实
际值。
那么(volatile unsigned char *)0x20是一个固定的指针,是不可变的,不是变量。而char *u则是个指针变量。
再在前面加"*":*(volatile unsigned char *)0x20则变成了变量(普通的unsigned char变量,不是指针变量),
如果#define i (*(volatile unsigned char *)0x20),那么与unsigned char i是一样了,只不过前面的i的地址是固定的。
那么你的问题就可解答了,(*(volatile unsigned char *)0x20)可看作是一个普通变量,这个变量有固定的地址,
指向0x20。而0x20只是个常量,不是指针更不是变量。
指向0x20。而0x20只是个常量,不是指针更不是变量。
原文链接:https://blog.csdn.net/ysdaniel/article/details/6667244
最新文章
- EVE ToDo
- SQL SERVER各种用法总结
- 实现跨域的N种方法
- [转载]angularjs学习总结 详细教程
- How can I work smarter, not just harder? Ask it forever
- Java longTime 和C#日期转换(结构+运算符重载)
- Android四大组件之一:BroadCastReceiver(广播接收者)
- django的url的name参数的意义(转发)
- STM32下载方法
- 机器更换登录密码重启,然后SQL Server登录不了
- [转] UIImage 图像-IOS开发 (实例)
- Html中input标签的使用
- Python倒计时器(转)
- LeetCode169:Majority Element(Hash表\位操作未懂)
- android打电话方法(直接拨通)
- 远程连接阿里云的mysql数据库
- eclipse.ini参数配置
- 【Codeforces666E】Forensic Examination 后缀自动机 + 线段树合并
- lmathlib文件
- String.replace与String.format
热门文章
- java 的序列化与反序列化
- CDN原理介绍(转)
- Java泛型之自限定类型
- Problem 3: Largest prime factor
- 用indexof来统计字符出现的次数
- 搭建webpack基础配置
- LGOJ P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
- npm install报错npm ERR! Maximum call stack size exceeded解决
- python学习第四次笔记
- [转载]Fiddler为所欲为第四篇 直播源抓取与接口分析 [四]