正在改变C变化的变量

时间:2016-11-27 17:47:46

标签: c msp430

我的问题出现在变量total上。调试器就像它甚至不存在一样,或者如果你摆脱*,它会运行并运行并提供一个奇怪的数字。该计划的想法是向total添加角钱(或10),直到它大于10000的目标。

我在C中使用IAR Embedded Workbench编写此代码,并使用的是MSP430G2553。

#include <msp430g2553.h>
#include <stdio.h>
volatile unsigned int i;
int dime=0;
int goalz =10000;
int main( void )
{
      // Stop watchdog timer to prevent time out reset
      WDTCTL = WDTPW + WDTHOLD;
      P1DIR |= 0x00;
      for(;;){
        P1OUT =0x01;
        while(1)
        {
          if((BIT4 & P1IN)) 
          {
            P1OUT |= 0x01;
            dime++;
            int *total = 0;
            *total = &dime;
          }
          else
          {
            P1OUT |= 0x00;
          }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

int *total = 0;
*total = &dime;

错误,因为您试图将dime的地址(不是其值)存储在total指向的位置,即零=&gt;不是你想要的(有人建议这是寄存器的位置,所以即使它没有崩溃,它也无效。编写INTENA寄存器好!)。

调试器可能会优化此语句,直接写入零。

不完全确定您想要实现的目标,但您必须将total声明为全局变量并向其添加dime。这里不需要使用指针或变量地址。

答案 1 :(得分:1)

由于编译器甚至没有生成代码,因此调试器可能会逐步完成。您正在堆栈中创建变量total(指针或整数)(即,您添加一个项目),您分配一个值,然后您超出范围,因此变量不再存在。

我认为你想要实现的目标是:

if (...) {
  static int total = 0;
  total = dime
}

但是,然后,变量total完全没用,因为它总是与dime相同的值。 totaldime应该如何不同?