单片机开发volatile至关重要的作用_第1页
单片机开发volatile至关重要的作用_第2页
单片机开发volatile至关重要的作用_第3页
单片机开发volatile至关重要的作用_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第第页单片机开发volatile至关重要的作用(单片机开发)初学者可能不怎么关心编译器优化的功能,但对于经验丰富的(工程师)来说,掌握代码优化是必备技能。

今天讲述的(话题)就是关于代码优化中,

关键字volatile在优化过程中起到的作用

什么是volatile?

volatile是一个类型修饰符(typespecifier)。

volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

volatile变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。

来自百度百科

volatile的定义,应该在(读书)学习时都看过无数遍,但我相信绝大部分人都

没有深刻理解其中含义

当你真正(编程)、开发项目之后,你就会进一步理解其中含义。

哪些场合会用到volatile关键字

当你理解volatile关键字的含义之后,你就能明白,其实很多场合都能用到volatile关键字。

1.全局变量

(单片机)开发,难免会用到全局变量。一些初级工程师,更是全局变量满天飞。这种情况下,使用volatile关键字也许能减少代码bug率。

2.(寄存器)

单片机开发,寄存器添加volatile关键字应该是必须的,如果你平时有仔细观察,正规一点的【库】都会添加volatile关键字。

具体细分的话,代码里面有很多地方都会用到volatile关键字。

volatile关键字对编译器优化的影响

我们都知道编译器有优化代码的功能,我们常用的集成开发环境((Keil)、IAR等)都有优化选项。

如果不使用关键字volatile申明变量,则编译器可能会对变量的访问并生成非预期的代码或删除预期的功能。

1.何时使用volatile?

常见使用volatile声明的情况:

访问内存映射外设。

在多个线程之间共享全局变量。

在中断例程或(信号)处理程序中访问全局变量。

比如,在(STM32)代码中:

#define__Ovolatile/*!浏览代码,你会发现,很多地方都使用了“__IO”,也就是volatile.

线程间共享的全局变量,建议都加上volatile关键字

,这一点,很多人没有在意。

2.不使用volatile时可能出现的问题

如果未将变量用volatile声明,则编译器会假定其值不能在其定义的范围之外进行修改。

因此,编译器可能会执行不需要的优化。这可以通过多种方式表现出来:

在轮询(硬件)时,代码可能会陷入循环。

多线程代码可能会表现出奇怪的行为。

优化可能会导致删除实现故意时序延迟的代码。

举例:

自己写一个延时函数:

voidDelay(intCnt){inti;while(Cnt--){i++;for(i=0;i

你在不同优化等级情况下,

延时时间可能会不一样

同样的代码,你在Keil和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论