这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » [转]volatile关键字作用

共1条 1/1 1 跳转至

[转]volatile关键字作用

工程师
2020-06-29 15:42:26     打赏

首先来看一段代码:

//P1.0口连接LED0,实现LED0闪烁

#include <msp430.h>

int main(void)

{

       WDTCTL = WDTPW | WDTHOLD;      // stop watchdog timer

       unsigned int i;

       P1DIR=0x01;                    //定义P1.0口为输出引脚。

       while(1)

       {

           P1OUT=0x01;               //P1.0输出高电平

           for(i=5000;i>0;i--);

           P1OUT=0x00;               //P1.0输出低电平

           for(i=5000;i>0;i--);

       }

}

测试结果:

LED0一直亮着

 

为什么会这样呢?

把上述代码变量i的定义语句做出如下修改,再烧写并上电测试

volatile unsigned int i;

测试结果:

LED0 闪烁

 

为什么加了volatile关键字就把问题解决了呢,这个关键字作用到底是什么?

Volatile:定义“发挥性”变量,编译器将认定该变量的值会随时改变,对该变量的任何操作都不会被优化过程删除。编者在实际编程的过程中发现,利用变量i递减或递加产生的软件延时函数,会被编译器优化而不会执行,因此若读者遇到这种情况且希望延时函数工作,只能在变量i前加volatile关键字即可

注:上述内容摘自《MSP430单片机原理与应用—MSP430F5xx/6xx系列单片机入门、提高与开发(任保宏、徐科军)》

 

总结:

volatile关键字作用。从实验1测试结果可以得出,两条for循环语句均被编译器优化过程删除。实际while循环中仅有P1OUT=0x01;P1OUT=0x00;所以输出结果LED0常亮。通过实验2可以得出如下结论:volatile关键字作用是告诉编译器该变量(变量i)任何操作都不可以被优化过程删除且希望软件延时函数能正常工作。





关键词: volatile     关键字     作用    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]