我的问题出在变量 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/