以前也是知道violate 的作用,是可变的意思,因为变量可能发生意想不到的变化,用到的时候一定要用最新的数据,因为很多编译器在编译程序的过程是对程序进行优化,以提高运行效率,这就可能出现这样的情况,用的到变量值不是最新的,而是已经存在在缓存中的值,这样就可能出现莫名其妙的错误,所以对一些易变的变量,加上violate

修饰,编译器在编译过程中就不会对读写这个变量就不会进行优化,用在以下 几个方面:1进程间参数传递2特殊功能寄存器。

volatile的意义是:

比如两个线程在运行中。第一个线程已经初始化,将变量a载入了缓存后,这时候第二个线程改变了a的值。如果a没有用volatile修饰的话,那么可

能在第一个线程中使用a时,还是使用的缓存中没有改变过的值。(这只是一个可能性,因为多线程的运行谁都不能保证结果是什么,这是与不同的系统有关的)。

如果使用了volatile修饰,那么保证每次取a的值都不是从缓存中取,而是从a所真正对应的内存地址中取.

volatile的本意是“易变的”

由于访问寄存器的速度要快过RAM,所以编译器一般都会作减少存取外部RAM的优化。比如:

static int i=0;

int main(void)

{

...

while (1)

{

if (i) dosomething();

}

}

/* Interrupt service routine. */

void ISR_2(void)

{

i=1;

}

程序的本意是希望ISR_2中断产生时,在main当中调用dosomething函数,但是,由于编译器判断在main函数里面没有修改过i,因此可能只执行一次对从i到某寄存器的读***作,然后每次if判断都只使用这个寄存器里面的“i副本”,导致dosomething永远也不会被调用。如果将将变量加上volatile修饰,则编译器保证对此变量的读写***作都不会被优化(肯定执行)。此例中i也应该如此说明。

一般说来,volatile用在如下的几个地方:

1、中断服务程序中修改的供其它程序检测的变量需要加volatile;

2、多任务环境下各任务间共享的标志应该加volatile;

3、存储器映射的硬件寄存器通常也要加volatile说明,因为每次对它的读写都可能由不同意义;

另外,以上这几种情况经常还要同时考虑数据的完整性(相互关联的几个标志读了一半被打断了重写),在1中可以通过关中断来实现,2中可以禁止任务调度,3中则只能依靠硬件的良好设计了。

violate在c语言中的作用,Violate的应用和作用相关推荐

  1. c语言中的头文件stdlib.h的作用,C语言中你可能不熟悉的头文件(stdlib.h)

    C语言中你可能不熟悉的头文件(stdlib.h) C Standard General Utilities Library (header) C标准通用工具库(头文件) 此头文件定义了一些通用功能函数 ...

  2. 在c语言中保留字是有专门含义和作用的,c语言中的关键字和保留字的区别?

    c语言中的关键字和保留字的区别?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中的关键字和保留字的区别? 在C语 ...

  3. C语言中使用空的宏定义的作用

    在Windows网络编程中,发现Winsock2.h这个头文件中有一些空的宏,即定义了一些NULL宏,例如: #define far #define near 查了一下,作用是: 1.开关作用 2.有 ...

  4. c语言中的头文件stdlib.h的作用,c语言includestdlib.h什么意思?

    c语言"include"的意思是:头文件即"standard library"标准库头文件.该文件包含了的C语言标准库函数的定义"stdlib&quo ...

  5. c语言中的头文件stdlib.h的作用,c语言中includestdlib.h的意思是什么

    c语言中include的意思是什么 发布时间:2020-07-16 09:17:22 来源:亿速云 阅读:1720 作者:Leah 这篇文章将为大家详细讲解有关c语言中include的意思是什么,文章 ...

  6. c语言中的头文件stdlib.h的作用,C语言头文件#includestdlib.h的作用

    stdlib 头文件即standard library标准库头文件 stdlib 头文件里包含了C.C++语言的最常用的系统函数 该文件包含了的C语言标准库函数的定义 stdlib.h里面定义了五种类 ...

  7. [C++] C语言及C++语言中包含的头文件名称,及作用

    头文件主目录include 头文件目录中总共有32个.h头文件.其中主目录下有13个,asm子目录中有4个,linux子目录中有10个,sys子目录中有5个.这些头文件各自的功能如下,具体的作用和所包 ...

  8. c语言中的头文件string.h的作用,C语言常用头文件及库函数——string.h

    string.h 函数与形参类型: 函数功能: 返回值: 例子: 1.memcmp 函数与形参类型: int memcmp(buf1,buf2,count); void * buf1, void bu ...

  9. c语言中的指数e怎么表示什么作用,什么叫做指数E;指数E是用什么推导出来的?...

    2014-05-19 e8500比e5800强多少 E8500是LGA 775针脚里最强的酷睿双核,E5800是属于奔腾双核系列,不是一个级别的,比不了.E8500的二级缓存为6MB,E5800为2M ...

最新文章

  1. python查找数组中出现次数最多的元素
  2. Python:为什么只有一个元素的tuple要加逗号?
  3. 免费下载 |《数据分析从理念到实操》白皮书上线!先收藏!
  4. 基础知识:if判断、while循环、for循环
  5. PHP设置块注释的模板
  6. 雷利子油猴脚本v0.3.6,无需启动天翼客户端直接下载
  7. Data Collection with Apache Flume(一)
  8. MapXtreme 使用技巧10例
  9. (47)FPGA面试题LATCH和DFF的区别
  10. VC++实现防火墙过滤
  11. 静态化 - 真静态技术
  12. paip.提升用户体验--radio图片选择器 easyui 实现..
  13. oracle地理数据库,Oracle 中的多个地理数据库 (geodatabase)
  14. 在浏览器设置中,如何禁用或启用Cookie?
  15. python语句分号_你知道分号在各种编程语言中的作用吗?
  16. excel怎么录入身份证号码快速方便?
  17. 微信发红包如何设计测试用例
  18. win10商店下载主题壁纸提取
  19. HTML、CSS要点精华
  20. 多个html文件内容合并,Bat批量将多个文件夹内容合并一个文件夹

热门文章

  1. Proximal Point Algorithm(PPA)
  2. 2021考研计算机调剂学校,各大院校2021考研调剂信息汇总(持续更新)
  3. springCloud之Netflix完整学习
  4. MOV AX,DATA MOV DS,AX
  5. 基本的SELECT语句的练习(MySQL)(SQLyog)
  6. syntax error, unexpected ‘array‘ (T_ARRAY)
  7. gsoc 任务_gsoc 2020火箭聊天React式全屏作曲家
  8. PhotoSwipe 官方API解读(一)
  9. 可兼容所有浏览器的“收藏本站”、“设为首页”js代码
  10. centos虚拟机重启网卡命令