C 改变变量正在被跳过

标签 c msp430

我的问题出在变量 total 上。调试器就像它根本不存在一样跳过,或者如果你去掉 *,它会运行并运行并提供一个奇怪的数字。该程序的想法是将 dime(或 10)添加到 total 中,直到它大于目标 10000

我正在使用 IAR Embedded Workbench 用 C 语言编写此代码,并使用 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;
          }
        }
    }
}

最佳答案

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

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

调试器可能优化了这条语句,直接写入零。

不完全确定你想要实现什么,但你必须将total声明为一个全局变量,并向它添加dime。此处无需使用指针或变量地址。

关于C 改变变量正在被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40831972/

相关文章:

c - 为什么 C 中的系统调用总是进行错误检查?

c - 来自C文件的输入

c - 未解析的符号,首先引用于

c - 用 C 中断

c - MSP430 执行库

c - 在 Mongoose WebServer 中检索请求正文时出错

c - linux如何修补这段代码

c - 库插入 nanosleep

c - 不确定这行代码在c中的作用