C语言之volatile实例技巧讲解.pdf

C语言之volatile实例技巧讲解.pdf

ID:52470386

大小:83.70 KB

页数:9页

时间:2020-03-27

C语言之volatile实例技巧讲解.pdf_第1页
C语言之volatile实例技巧讲解.pdf_第2页
C语言之volatile实例技巧讲解.pdf_第3页
C语言之volatile实例技巧讲解.pdf_第4页
C语言之volatile实例技巧讲解.pdf_第5页
资源描述:

《C语言之volatile实例技巧讲解.pdf》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、volatile的本意是一般有两种说法--1.“暂态的”;2.“易变的”。这两种说法都有可行。但是究竟volatile是什么意思,现举例说明(以Keil-c与a51为例例子来自KeilFQA),看完例子后你应该明白volatile的意思了,如果还不明白,那只好再看一遍了。例1.voidmain(void){volatileinti;intj;i=1;//1不被优化i=1i=2;//2不被优化i=1i=3;//3不被优化i=1j=1;//4被优化j=2;//5被优化j=3;//6j=3}----------------------------------------

2、-----------------------------例2.函数:voidfunc(void){unsignedcharxdataxdata_junk;unsignedcharxdata*p=&xdata_junk;unsignedchart1,t2;t1=*p;t2=*p;}编译的汇编为:00007E00RMOVR6,#HIGHxdata_junk00027F00RMOVR7,#LOWxdata_junk;----Variable’p’assignedtoRegister’R6/R7’----00048F82MOVDPL,R700068E83MOVDPH,R

3、6;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!注意0008E0MOVXA,@DPTR0009F500RMOVt1,A000BF500RMOVt2,A;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000D22RET将函数变为:voidfunc(void){volatileunsignedcharxdataxdata_junk;volatileunsignedcharxdata*p=&xdata_junk;unsignedchart1,t2;t1=*p;t2=*p;}编译的汇编为:00007E00RMOVR6,#HIGHxdata_jun

4、k00027F00RMOVR7,#LOWxdata_junk[Page];----Variable’p’assignedtoRegister’R6/R7’----00048F82MOVDPL,R700068E83MOVDPH,R6;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!0008E0MOVXA,@DPTR0009F500RMOVt1,Aa处000BE0MOVXA,@DPTR000CF500RMOVt2,A;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!000E22RET比较结果可以看出来,未用volatil

5、e关键字时,只从*p所指的地址读一次如在a处*p的内容有变化,则t2得到的则不是真正*p的内容。---------------------------------------------------------------------例3volatileunsignedcharbdatavar;//usevolatilekeywordheresbitvar_0=var^0;sbitvar_1=var^1;unsignedcharxdatavalues[10];voidmain(void){unsignedchari;for(i=0;i

6、;i++){var=values[i];if(var_0){var_1=1;//a处values[i]=var;//withoutthevolatilekeyword,thecompiler//assumesthat’var’isunmodifiedanddoesnot//reloadthevariablecontent.}}}在此例中,如在a处到下一句运行前,var如有变化则不会,如var=0xff;则在[Page]values[i]=var;得到的还是values[i]=1;-------------------------------------------

7、--------------------------应用举例:例1.#defineDBYTE((unsignedcharvolatiledata*)0)说明:此处不用volatile关键字,可能得不到真正的内容。---------------------------------------------------------------------例2.#defineTEST_VOLATILE_C//***************************************************************//verwendeteIncludeD

8、ateie

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。