Arduino —全局变量失去了价值

时间:2019-03-03 15:30:06

标签: arduino

我有两个变量alarmMinutealarmHour

我让他们在每个循环中打印出来,如果我有这段代码,那么alarmMinute在第一个循环后将降为0。

if(buttonPushed){
  alarmMinute += 5;
  if(alarmMinute > 60){
    alarmMinute = 0;
  }
}

显示器输出:

alarmHour: 14    alarmMinute: 28    currentSeconds: 6913    alarmSeconds: 6720    timeGap: 193    alarmLength: 300    AlarmProgress: 64
alarmHour: 14    alarmMinute: 0    currentSeconds: 6913    alarmSeconds: 5040    timeGap: 1873    alarmLength: 300    AlarmProgress: 0
alarmHour: 14    alarmMinute: 0    currentSeconds: 6914    alarmSeconds: 5040    timeGap: 1874    alarmLength: 300    AlarmProgress: 0

但如果我注释掉该代码,则:

if(buttonPushed){
// alarmMinute += 5;
// if(alarmMinute > 60){
//   alarmMinute = 0;
// }
}

然后我丢失了alarmHour的值:

alarmHour: 14    alarmMinute: 28    currentSeconds: 7052    alarmSeconds: 6720    timeGap: 332    alarmLength: 300    AlarmProgress: 0
alarmHour: 0    alarmMinute: 28    currentSeconds: 7052    alarmSeconds: 1680    timeGap: 5372    alarmLength: 300    AlarmProgress: 0
alarmHour: 0    alarmMinute: 28    currentSeconds: 7053    alarmSeconds: 1680    timeGap: 5373    alarmLength: 300    AlarmProgress: 0

在两种情况下,我都不按下按钮,因此代码根本不应该运行。另外,当它的值为28时,该代码不应影响alarmMinute,并且明确地注释该代码 不应影响alarmHour的值,有人知道发生了什么吗?我的内存用完了吗?

1 个答案:

答案 0 :(得分:0)

我最终发现了问题-我有一个char[12]数组,但不小心将其填充了13个前导空格。

之所以更改代码中看似随机的部分会导致不同的变量消失,是因为擦除了数组旁边的内存。

这是令人讨厌的网络攻击的基本原理-引用超出范围的数组。