我的问题出现在变量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;
}
}
}
}
答案 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相同的值。 total
和dime
应该如何不同?