【问题标题】:can we use two break statements in a single while(1) loop?我们可以在一个 while(1) 循环中使用两个 break 语句吗?
【发布时间】:2017-06-01 15:29:18
【问题描述】:

以下是我的程序。我正在尝试以不同的波特率读取字符,如果在 10 秒内没有收到任何字符,我想跳出循环,同样,如果收到字母以外的任何字符,我又想跳出循环?我怎样才能做到这一点。请指导我。

char read()
{
    while(1)
    {
        delay_ms(10000);
        break;

        if((uart_RxChar() >= 65 && uart_RxChar() <= 90) || (uart_RxChar() >= 97 && uart_RxChar() >= 122))
        {
            uart_TxChar('k');
            Glow_GreenLED();
        }
        else 
        {
            Glow_RedLED();
            break;
        }
    }
}

【问题讨论】:

  • 我不认为delay_ms()会帮助你等待10秒......这是一个无条件的想法......它会让你等待。
  • delay_ms() 为 doble 后中断。
  • uart_RxChar() 不是标准 C 库函数。发布一些记录其功能的链接。

标签: c


【解决方案1】:
char read()
{
   while(1)
   {
       delay_ms(10000); // Stops the program
       break; // Then leaves

       if( (uart_RxChar() >= 65 && uart_RxChar() <= 90) || (uart_RxChar() >= 97 && uart_RxChar() >= 122))
       {

           uart_TxChar('k');
           Glow_GreenLED();
       }
       else 
       {
           Glow_RedLED();
           break;
       }
    }
 }

你试图做的事情不会成功。你必须知道延迟不会那样工作。当您的程序达到延迟时,它将停止一切 - 输入也 - 在延迟期间。这意味着无论您做什么,它都会等待然后中断。
使用延迟实现您想要做的事情的唯一方法是使用线程,让一个线程等待并测量时间,另一个线程等待输入。一种不使用线程的方法是使用timer 并使用计时器的值作为中断条件。可能是这个link 可以提供帮助。 尽管如此,完全有可能拥有尽可能多的中断条件:

if (CONDITION_1) 
    break;
else if (CONDITION_2) 
{ 
      printf("something");
      break;
}
else if (CONDITION_3) 
{
      someFunction();
      break;
}
else 
      break;

【讨论】:

    【解决方案2】:

    你到达的第一个break;,将跳出循环,意思是,

       while(1)
       {
        delay_ms(10000);
         break;
    

    相同
    delay_ms(10000);
    

    你的第二个 break; 以及你的整个 if-else 被“切断”,因为循环会在之前中断

    【讨论】:

    • 如果我在 while(1) 循环之外使用 delay_ms(1000),它会起作用吗?
    • 什么会起作用? delay_ms(1000) 将以任何一种方式执行。如果您想延迟并检查是否收到除字母以外的任何字符,我建议您查看线程
    • 我想你没有理解我的问题,我只是想给函数一个特定的执行时间框架,如果没有在那个槽中执行,它应该将控制权返回给下一个语句主()>
    • 使用 delay_ms(X) 不会让你的 read() X ms 工作,如果这就是你的意思。它会延迟 X 毫秒,然后从那里继续 - 在你的情况下,它会中断。如果您希望 read() 在该时间范围内执行,您应该考虑线程,其中一个启动 read() 并且一个正在计时
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2011-02-24
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多