c语言volatile的用法(有谁能否帮我解释一下C语言中的volatile关键字,最好是要有程序例子的谢谢啊!!)

2024-10-07 07:15:25 2

c语言volatile的用法(有谁能否帮我解释一下C语言中的volatile关键字,最好是要有程序例子的谢谢啊!!)

这篇文章给大家聊聊关于c语言volatile的用法,以及有谁能否帮我解释一下C语言中的volatile关键字,最好是要有程序例子的谢谢啊!!对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

本文目录

有谁能否帮我解释一下C语言中的volatile关键字,最好是要有程序例子的谢谢啊!!

推荐一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1). 并行设备的硬件寄存器(如:状态寄存器) 2). 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3). 多线程应用中被几个任务共享的变量 如TI corn 3的std_het.h文件里就有volatile的使用,/*---------------------------------------------*//* ACMP INSTRUCTION *//*---------------------------------------------*/typedef volatile struct acmp_format{ unsigned int : 11 ; unsigned int brk : 1 ; unsigned int next_program_address : 8 ; unsigned int op_code : 4 ; unsigned int : 3 ; unsigned int : 5 ; unsigned int : 10 ; unsigned int auto_read_clear : 1 ; /**/ unsigned int en_pin_action : 1 ; unsigned int cond_addr : 8 ; unsigned int pin_select : 5 ; unsigned int : 2 ; unsigned int pin_action : 1 ; unsigned int : 1 ; unsigned int t_register_select : 1 ; unsigned int ab_register_select : 1 ; unsigned int interrupt_enable : 1 ; unsigned int : 7 ; unsigned int data : 20 ; unsigned int : 5 ; } ACMP_FIELDS; typedef volatile union{ ACMP_FIELDS acmp ; HET_MEMORY memory ;} ACMP_INSTRUCTION; 详细说明可以看看参考对volatile的说明。

c语言volatile stu stu1; stu是结构体变量 请问stu1和stu在此情

volatile 影响编译器编译的结果,指出,volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要进行编译优化,以免出错,(VC++ 在产生release版可执行码时会进行编译优化,加volatile关键字的变量有关的运算,将不进行编译优化。)。 例如: volatile int i=10; int j = i; ... int k = i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 而优化做法是,由于编译器发现两次从i读数据的代码之间的代码没有对i进行过操作,它会自动把上次读的数据放在k中。而不是重新从i里面读。这样以来,如果i是一个寄存器变量或者表示一个端口数据就容易出错,所以说volatile可以保证对特殊地址的稳定访问,不会出错。

c语言中volatile关键字是什么含义

用volatile关键字定义变量,相当于告诉编译器,这个变量的值会随时发生变化,每次使用时都需要去内存里重新读取它的值,并不要随意针对它作优化。不使用volatile定义的变量,可能因为编译器优化而出现一些问题,具体可以看给出的参考资料,里面有一个例子。建议使用volatile变量的场所:(1) 并行设备的硬件寄存器(2) 一个中断服务子程序中会访问到的非自动变量(全局变量)(3) 多线程应用中被几个任务共享的变量

C语言中的volatile是什么意思

volatile 实例讲解volatile的本意是一般有两种说法--1.“暂态的”;2.“易变的”。这两种说法都有可行。但是究竟volatile是什么意思,现举例说明(以Keil-c与a51为例例子来自Keil FQA),看完例子后你应该明白volatile的意思了,如果还不明白,那只好再看一遍了。例1.void main (void){volatile int i;int j;i = 1; //1 不被优化 i=1i = 2; //2 不被优化 i=1i = 3; //3 不被优化 i=1j = 1; //4 被优化j = 2; //5 被优化j = 3; //6 j = 3}---------------------------------------------------------------------例2.函数:void func (void){unsigned char xdata xdata_junk;unsigned char xdata *p = &xdata_junk;unsigned char t1, t2;t1 = *p;t2 = *p;}编译的汇编为:0000 7E00 R MOV R6,#HIGH xdata_junk0002 7F00 R MOV R7,#LOW xdata_junk;---- Variable ’p’ assigned to Register ’R6/R7’ ----0004 8F82 MOV DPL,R70006 8E83 MOV DPH,R6;!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 注意0008 E0 MOVX A,@DPTR0009 F500 R MOV t1,A000B F500 R MOV t2,A;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000D 22 RET 将函数变为:void func (void){volatile unsigned char xdata xdata_junk;volatile unsigned char xdata *p = &xdata_junk;unsigned char t1, t2;t1 = *p;t2 = *p;}编译的汇编为:0000 7E00 R MOV R6,#HIGH xdata_junk0002 7F00 R MOV R7,#LOW xdata_junk;---- Variable ’p’ assigned to Register ’R6/R7’ ----0004 8F82 MOV DPL,R70006 8E83 MOV DPH,R6;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0008 E0 MOVX A,@DPTR0009 F500 R MOV t1,A a处000B E0 MOVX A,@DPTR000C F500 R MOV t2,A;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000E 22 RET 比较结果可以看出来,未用volatile关键字时,只从*p所指的地址读一次如在a处*p的内容有变化,则t2得到的则不是真正*p的内容。---------------------------------------------------------------------例3volatile unsigned char bdata var; // use volatile keyword heresbit var_0 = var^0;sbit var_1 = var^1;unsigned char xdata values;void main (void) { unsigned char i; for (i = 0; i 《 sizeof (values); i++) { var = values; if (var_0) { var_1 = 1; //a处 values = var; // without the volatile keyword, the compiler // assumes that ’var’ is unmodified and does not // reload the variable content. } }}在此例中,如在a处到下一句运行前,var如有变化则不会,如var=0xff; 则在values = 1;---------------------------------------------------------------------应用举例:例1.#define DBYTE ((unsigned char volatile data *) 0)说明:此处不用volatile关键字,可能得不到真正的内容。---------------------------------------------------------------------例2.#define TEST_VOLATILE_C //***************************************************************// verwendete Include Dateien//***************************************************************#if __C51__ 《 600 #error: !! Keil 版本不正确#endif//***************************************************************// 函数 void v_IntOccured(void)//***************************************************************extern void v_IntOccured(void);//***************************************************************// 变量定义//***************************************************************char xdata cvalue1; //全局xdatachar volatile xdata cvalue2; //全局xdata//***************************************************************// 函数: v_ExtInt0()// 版本:// 参数:// 用途:cvalue1++,cvalue2++//***************************************************************void v_ExtInt0(void) interrupt 0 { cvalue1++; cvalue2++; } //***************************************************************// 函数: main()// 版本:// 参数:// 用途:测试volatile//***************************************************************void main() {char cErg;//1. 使cErg=cvalue1;cErg = cvalue1;//2. 在此处仿真时手动产生中断INT0,使cvalue1++; cvalue2++if (cvalue1 != cErg) v_IntOccured();//3. 使cErg=cvalue2;cErg = cvalue2;//4. 在此处仿真时手动产生中断INT0,使cvalue1++; cvalue2++if (cvalue2 != cErg) v_IntOccured(); //5. 完成 while (1);}//***************************************************************// 函数: v_IntOccured()// 版本:// 参数:// 用途: 死循环//***************************************************************void v_IntOccured() { while(1);}仿真可以看出,在没有用volatile时,即2处,程序不能进入v_IntOccured();但在4处可以进入v_IntOccured();

如果你还想了解更多这方面的信息,记得收藏关注本站。

c语言volatile的用法(有谁能否帮我解释一下C语言中的volatile关键字,最好是要有程序例子的谢谢啊!!)

本文编辑:admin

更多文章:


lt26i刷机(索尼lt26ii怎么进入刷机模式啊)

lt26i刷机(索尼lt26ii怎么进入刷机模式啊)

本文目录索尼lt26ii怎么进入刷机模式啊lt26i 认不了数据线 怎样刷机求助lt26i刷机失败了索尼xperia lt26i 怎么刷机索尼lt26i刷机失败只能进入fastboot模式怎么办索尼lt26i刷机失败 recovery模式进

2024年7月13日 03:36

八零全本txt免费下载网(80电子书txt全本免费下载网站换名字了)

八零全本txt免费下载网(80电子书txt全本免费下载网站换名字了)

大家好,关于八零全本txt免费下载网很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于80电子书txt全本免费下载网站换名字了的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各

2024年9月4日 20:25

logo设计图片免费(公司logo设计,公司logo设计,求推荐)

logo设计图片免费(公司logo设计,公司logo设计,求推荐)

这篇文章给大家聊聊关于logo设计图片免费,以及公司logo设计,公司logo设计,求推荐对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录公司logo设计,公司logo设计,求推荐自己在线制作logo免费,怎么自己作免费log

2024年6月30日 05:41

符文熔炉在哪(DK的符文熔炉在哪)

符文熔炉在哪(DK的符文熔炉在哪)

本文目录DK的符文熔炉在哪魔兽世界符文熔炉在哪里图片魔兽世界术士职业大厅神器熔炉在哪魔兽世界里死亡骑士新手任务第二个,符文熔铸的任务怎么做,DK的符文熔炉在哪黑风要塞2楼 那个骷髅头炉子!做完新手任务NPC会教给你符文熔铸技能 熔炉只有在黑

2024年5月20日 05:09

路由器默认密码(路由器的登陆密码是什么)

路由器默认密码(路由器的登陆密码是什么)

本文目录路由器的登陆密码是什么路由器一般的初始密码是多少什么是路由器默认密码路由器初始密码是什么路由器的初始密码是多少路由器的默认密码是什么路由器的原始密码是什么tplink路由器初始密码是多少h3c h300默认密码路由器的登陆密码是什么

2023年10月31日 02:00

office怎么下载(word怎么下载安装到电脑上)

office怎么下载(word怎么下载安装到电脑上)

今天给各位分享word怎么下载安装到电脑上的知识,其中也会对word怎么下载安装到电脑上进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录word怎么下载安装到电脑上office办公软件怎么在电脑下载笔记本电脑怎

2024年6月16日 22:40

拿货最便宜的批发网站(卖玩具在哪里拿货便宜)

拿货最便宜的批发网站(卖玩具在哪里拿货便宜)

各位老铁们,大家好,今天由我来为大家分享拿货最便宜的批发网站,以及卖玩具在哪里拿货便宜的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录卖玩具在哪里拿

2024年7月2日 14:30

root官网下载(怎样开启root权限)

root官网下载(怎样开启root权限)

大家好,root官网下载相信很多的网友都不是很明白,包括怎样开启root权限也是一样,不过没有关系,接下来就来为大家分享关于root官网下载和怎样开启root权限的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录怎

2024年7月6日 03:25

夜神模拟器官网(使命召唤在哪里下载怎么下载)

夜神模拟器官网(使命召唤在哪里下载怎么下载)

本篇文章给大家谈谈夜神模拟器官网,以及使命召唤在哪里下载怎么下载对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录使命召唤在哪里下载怎么下载夜

2024年10月17日 07:45

office2010官网(Microsoft Office2010好用吗)

office2010官网(Microsoft Office2010好用吗)

大家好,如果您还对office2010官网不太了解,没有关系,今天就由本站为大家分享office2010官网的知识,包括Microsoft Office2010好用吗的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录

2024年10月10日 23:05

理财产品都有什么?理财产品什么意思

理财产品都有什么?理财产品什么意思

大家好,如果您还对理财产品不太了解,没有关系,今天就由本站为大家分享理财产品的知识,包括理财产品都有什么的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录理财产品都有什么理财产品什么意思什么是银行理财产品什么是理财产

2024年7月2日 09:25

advanced materials(advancedmaterials和advancedener)

advanced materials(advancedmaterials和advancedener)

本篇文章给大家谈谈advanced materials,以及advancedmaterials和advancedener对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,

2024年5月10日 13:45

u盘虚拟软盘(我想自己制作个u盘启动盘)

u盘虚拟软盘(我想自己制作个u盘启动盘)

本文目录我想自己制作个u盘启动盘如何将一个U盘虚拟成软盘请教U盘模拟软驱的方法怎样把U盘做成软盘用u盘虚拟软盘,怎么在dos下使用用U盘虚拟软盘安装XP的具体虚拟步骤在 BIOS 中启用 没有SATA 为 IDE 兼容模式我想自己制作个u盘

2024年6月28日 08:47

如何核对查询图书的真伪?有可以查询图书基本信息的网站推荐吗

如何核对查询图书的真伪?有可以查询图书基本信息的网站推荐吗

本文目录如何核对查询图书的真伪有可以查询图书基本信息的网站推荐吗如何识别正版书和盗版书现在的盗版图书,除了在纸张和油墨质量上和正版有区别,在内容上和正版有什么区别如何核对查询图书的真伪凡是图书ISBN条形码在国家新闻出版广电总局网站或者在中

2024年6月13日 02:05

同兴环保股票(同兴环保破发原因)

同兴环保股票(同兴环保破发原因)

这篇文章给大家聊聊关于同兴环保股票,以及同兴环保破发原因对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录同兴环保破发原因同兴环保股票为啥主力不加入同兴环保股票有什么问题吗同心环保科技股份有限公司怎么样同兴环保上市时间同兴环保估

2024年6月29日 10:11

qq游戏麻将手机版官方下载(手机能玩QQ麻将吗)

qq游戏麻将手机版官方下载(手机能玩QQ麻将吗)

大家好,关于qq游戏麻将手机版官方下载很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于手机能玩QQ麻将吗的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录

2024年5月11日 10:31

音频转换工具(用什么软件转换MP3格式)

音频转换工具(用什么软件转换MP3格式)

这篇文章给大家聊聊关于音频转换工具,以及用什么软件转换MP3格式对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录用什么软件转换MP3格式什么音频转换软件好用淇睿通音频转换器怎么样有没有好的音频格式转换器,可以直接将mp3格式转

2024年4月14日 08:30

梦幻西游经验计算器(梦幻从125升到129要多少经验啊)

梦幻西游经验计算器(梦幻从125升到129要多少经验啊)

大家好,今天小编来为大家解答以下的问题,关于梦幻西游经验计算器,梦幻从125升到129要多少经验啊这个很多人还不知道,现在让我们一起来看看吧!本文目录梦幻从125升到129要多少经验啊梦幻西游等级计算器_梦幻西游等级计算器使用方法梦幻西游计

2024年4月23日 05:25

手机免费申请qq号(如何申请免费的qq号)

手机免费申请qq号(如何申请免费的qq号)

大家好,关于手机免费申请qq号很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何申请免费的qq号的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!本文目录如何申

2024年4月10日 09:10

blanket(blanket什么意思中文)

blanket(blanket什么意思中文)

其实blanket的问题并不复杂,但是又很多的朋友都不太了解blanket什么意思中文,因此呢,今天小编就来为大家分享blanket的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录blanket什么意思中文bla

2024年8月25日 07:45

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1735
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索