刚入手430有点程序上的小问题

2019-07-15 16:29发布

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P1DIR |= BIT4;                            // Set P1.0 to output direction
  for (;;)
  {
    P1OUT ^= BIT4;                          // Toggle P1.0 using exclusive-OR
    delay();                              // Delay
  }
}
void delay()
{
  volatile unsigned int i;
  i=50000;
  do(i--);
  while(i!=0);
}

闪闪灯的程序,为什么把volatile去掉等就闪不起来了呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
1226908863
2019-07-17 06:42
贠亮亮 发表于 2015-9-13 10:49
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变 ...

谢谢,貌似有点明白了

一周热门 更多>