关于嵌入式里的volatile
2017-08-17 21:02
260 查看
volatile修饰符主要目的是提示编译器该对象的值可能在编译器未检测到的环境下被改变,例如一个被系统时钟更新的变量,则该对象应该声明成volatile,则该编译器在执行某些例行化行为时就不能应用在被volatile修饰的变量上。
面试时的经典回答:一个定义为volatile的变量可能会被意想不到的改变,那么,编译器就不会去假设这个变量的值了 ,精确地说就是,优化器在用到这个变量的时候必须每次都小心的从内存中拿值,而不是使用保存在寄存器里的变量。
以下是使用volatile的几个例子:
1:并行设备的硬件寄存器(如状态寄存器)。
2:一个中断服务子程序中会访问到的非自动变量。
3:多线程应用中被几个任务共享的变量。
一个参数可以既是const又可以是volatile吗?一个指针可以是volatile吗?
可以,可以。
第一种情况,一个例子是只读状态寄存器。第二种情况是:一个中断服务子程序修改一个指向buffer的指针时。
面试时的经典回答:一个定义为volatile的变量可能会被意想不到的改变,那么,编译器就不会去假设这个变量的值了 ,精确地说就是,优化器在用到这个变量的时候必须每次都小心的从内存中拿值,而不是使用保存在寄存器里的变量。
以下是使用volatile的几个例子:
1:并行设备的硬件寄存器(如状态寄存器)。
2:一个中断服务子程序中会访问到的非自动变量。
3:多线程应用中被几个任务共享的变量。
一个参数可以既是const又可以是volatile吗?一个指针可以是volatile吗?
可以,可以。
第一种情况,一个例子是只读状态寄存器。第二种情况是:一个中断服务子程序修改一个指向buffer的指针时。
相关文章推荐
- 嵌入式编程中关于const,static,extern,volatile的用法
- 关于嵌入式如何学习(看了不后悔,给学技术的同行一条光明的路)
- 【嵌入式方向指南】关于嵌入式系统的学习路线图
- 嵌入式 关于setsockopt函数的详解
- 关于嵌入式的学习和职业发展
- (嵌入式)关于arm中的存储控制器(二)
- 关于如何学习嵌入式linux
- 关于多线程程序中使用volatile关键字的一个小例子
- 关于嵌入式操作系统几个主流方向的比较
- 关于我收集的嵌入式资料
- 关于c中volatile关键字
- 关于C语言中volatile关键字的理解
- 关于C的0x8本“经书”[嵌入式必读]
- 嵌入式 关于typedef的用法总结
- 嵌入式中C语言volatile和const的作用
- [嵌入式Linux驱动]关于RFID模块的Linux控制应用程序
- 关于Volatile
- 嵌入式linux和uboot中关于读写寄存器的函数(__raw_writel, writel等)
- 记一个关于volatile作状态标志的很奇怪的问题
- 关于嵌入式C&&C++的一些编程问题(三)