C 当使用==或时,While循环被卡住=

C 当使用==或时,While循环被卡住=,c,button,raspberry-pi,C,Button,Raspberry Pi,我正在用C语言编程rapsberry pi上的gpio引脚。不,我陷入了一个while循环。当我使用==或!=没关系,回路卡住了。这是因为当程序进入循环时,它不会更新while循环使用的变量的状态吗 for(i=0;i<200;i++) { uint8_t valu = bcm2835_gpio_lev(SIG); while(valu == 0) { uint8_t valu = bcm2835_gpio_lev(SIG);

我正在用C语言编程rapsberry pi上的gpio引脚。不,我陷入了一个while循环。当我使用==或!=没关系,回路卡住了。这是因为当程序进入循环时,它不会更新while循环使用的变量的状态吗

for(i=0;i<200;i++)
{
    uint8_t valu = bcm2835_gpio_lev(SIG);
    while(valu == 0)
        {
        uint8_t valu = bcm2835_gpio_lev(SIG);
        data[i] = 0;
        dan = dan + 1;
        delay(0.001);
        }

    timeout = 0;

    while(val == 1 && timeout < 70)
        {
        uint8_t val = bcm2835_gpio_lev(SIG);
        data[i] = data[i] + 1;
        dat = dat + 1;
        timeout = timeout + 1;
        delay(0.001);
        }

delay(0.001);
}

for(i=0;i两个循环都不修改val/valu,因为它在该循环中定义了一个新变量w/相同的名称,有效地隐藏了循环保护中使用的变量。

这应该有效

uint8_t valu = bcm2835_gpio_lev(SIG);
uint8_t val = 1;
while(valu == 0)
    {
    valu = bcm2835_gpio_lev(SIG);
    data[i] = 0;
    dan = dan + 1;
    delay(0.001);
    }

while(val==1&&timeout<70)
{
val=bcm2835_gpio_lev(SIG);
数据[i]=数据[i]+1;
dat=dat+1;
超时=超时+1;
延迟(0.001);
}

@staticx尽管您链接到的问题与GPIO有关,但该用户需要的是C语言的基础教程;问题更多的是关于变量的范围,而不是GPIO引脚。
while(val == 1 && timeout < 70)
    {
    val = bcm2835_gpio_lev(SIG);
    data[i] = data[i] + 1;
    dat = dat + 1;
    timeout = timeout + 1;
    delay(0.001);
    }