2024-06-01 23:37 采纳率: 0%
浏览 7
已结题

keil逻辑判断在哪里写

用开发板实现自动控制,发现控制可以实现,但不能跳出循环,然后程序卡死。我是在timer里写的,如果可以在timer写,那怎么跳出循环呢

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-06-01 23:37
    关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    在Keil编译器中,逻辑判断(如条件语句)通常在函数或循环体内的某个特定位置编写。如果你在定时器中断服务程序(Timer ISR)中写入了控制逻辑,并且希望在满足特定条件时跳出循环,你可以按照以下步骤操作:

    1. 添加条件检查: 在你的定时器中断服务程序中,找到执行控制逻辑的代码段,例如while循环。在循环内部添加一个条件判断,比如:

      volatile bool shouldExit = false; // 声明一个标志位
      
      void Timer_ISR(void) __interrupt(__TIMER0_VECTOR) {
          // ...其他代码...
      
          if (/*满足退出条件*/){
              shouldExit = true; // 设置标志位为真,表示需要退出
          }
      
          // 循环体
          while (!shouldExit) {
              // 控制逻辑...
          }
      
          // 如果在这里,说明已经满足退出条件
          // 清除中断使能,或者执行其他清理工作
          // ...
      }
      
    2. 控制循环退出: 当shouldExit被设置为true后,while循环会立即结束。在循环外部,你可以清除中断源、保存状态或者执行其他必要的操作。

    3. 注意中断管理: 在退出循环后,别忘了清除中断,以避免在下一次定时器溢出时再次进入中断服务程序:

      __disable_irq(); // 关闭中断
      // ...执行其他清理工作...
      __enable_irq(); // 重新打开中断
      

    确保在中断服务程序的最后,将shouldExit标志恢复到初始状态,以便在下次中断时正常处理。这样,当满足条件时,程序就会跳出循环,不再卡死。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月27日
  • 创建了问题 6月1日