澳门赌场江苏快三开奖时刻表: [原创] volatile关键字作用

永利游戏开户直营
72|1
楼主
首先来看一段代码:
  
//P1.0口连接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)任何操作都不可以被优化过程删除且希望软件延时函数能正常工作

沙发
| 2019-9-11 21:28 | 只看该作者
这应该还跟编译器的优化设置有关吧
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

永利游戏开户直营 快速回复 返回顶部 返回列表
九五至尊老品牌5手机app 汇丰快3开奖时刻表 赌博网站费用网上娱乐场 永利游戏开户直营 永利游戏开户直营
uc彩票平台 新世纪体彩排列3时时彩软件 金沙国际娱乐场手机版登入 星际MG电子时时彩网址 tt江苏快三走势图
淘金AB亚洲馆彩票 钱柜大小骰宝网址 神话吉林快3开奖直播 大红鹰娱乐墄登入 ttAG国际馆彩票官网
hb末平分野50手登入 网上申博赌场开户 www.988msc.com 千亿幸运28时时彩平台网址 威尼斯人VR金星1.5分彩计划群大全