arduino 使用byte替换int进行for循环发生死循环的原因和解决方法

在写一个arduino程序时,使用了for循环,很简单:

int i;
if (light==0) {
    for (i = 255; i >= 0; i -= 5) {
      analogWrite(10, i);
      delay(15);
    }
    for (i = 0; i <= 255; i += 5) {
      analogWrite(10, i);
      delay(15);
    }
  }

后来看到关于arduino内存优化的几种方法,其中一个就是把int等2字节的变量改为使用byte这种1字节的变量代替,byte类型存储数值范围是 0 – 255,因此我将上面的变量i声明由int i;改为了byte i;

byte i;  //修改了这里
if (light==0) {
    for (i = 255; i >= 0; i -= 5) {
      analogWrite(10, i);
      delay(15);
    }
    for (i = 0; i <= 255; i += 5) {
      analogWrite(10, i);
      delay(15);
    }
  }

满怀信心的运行,结果在第一个for循环里发生了死循环……
把byte改回int类型正常,百撕不得骑姐。
经过多次尝试发现了问题所在,由于byte的上限和下限是0和255,在for循环的判断中,最后一次i+使i超出了byte的上限255,i被自动赋予了小于255的数值,此数值仍然满足for的循环条件,因此仍然循环,如此往复,导致死循环。
找到原因后,对代码进行了修改如下:

byte i;
if (light==0) {
    for (i = 255; i >= 5; i -= 5) { //修改了这里的i>=0
      analogWrite(10, i);
      delay(15);
    }
    for (i = 0; i <= 250; i += 5) {  //修改了这里的 i <= 255
      analogWrite(10, i);
      delay(15);
    }
  }

程序没有再发生死循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值