刚入手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条回答
贠亮亮
1楼-- · 2019-07-15 19:41
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
贠亮亮
2楼-- · 2019-07-15 20:57
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
贠亮亮
3楼-- · 2019-07-16 01:16
 精彩回答 2  元偷偷看……
贠亮亮
4楼-- · 2019-07-16 05:56
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
贠亮亮
5楼-- · 2019-07-16 11:32
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。
贠亮亮
6楼-- · 2019-07-16 14:07
首先说下P1DIR |= BIT4;                            // Set P1.4 to output direction;
把int *a改为volatile int* i编译器就不会自动把它优化掉了。在整个运算过程中,对变量*i的值读取了再次。防止因变量*i的值在这一期间发生了改变,而导致程序结果的错误。i是个变量。用volatile防止因变量*a的值在这一期间发生了改变,而导致程序结果的错误。

一周热门 更多>