C语言 我如何在一段时间内运行一段特定的代码?

jk9hmnmh  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(168)

我不想测量一段代码运行的时间,我只想运行x秒。

#include <stdio.h>
#include <time.h>

int main()
{
  clock_t t_Zero, t_Final;
  double t_Diff;
  int goodAttempt = 1;

  while (1)
  {
      if (HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_6) == GPIO_PIN_SET) {
          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_SET);
          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_SET);
          t_Zero = clock();
          HAL_Delay(5000);
          HAL_GPIO_WritePin(GPIOB, GPIO_PIN_1, GPIO_PIN_RESET);
          HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, GPIO_PIN_RESET);

          while (t_Diff < 15 && goodAttempt == 1) { // 2 * frequency * t times to blink
              //i++;
              int i = 0;
              i++;
              t_Final = clock();
              t_Diff = (double)((t_Final-t_Zero)/CLOCKS_PER_SEC);
              HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);
              HAL_Delay(100);   /* Insert delay 100 ms (5Hz) */
              if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_5) == GPIO_PIN_SET && HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_5) == GPIO_PIN_SET) {
                  goodAttempt = 2;
                  break; // else, reset
              }

          }

}

现在是凌晨4:30,所以我的代码不是最好的,但是我已经在这个问题上花了几个小时,我真的找不到解决办法。

zzzyeukh

zzzyeukh1#

在STM32上,此类功能的基本用法是:

uint32_t start = HAL_GetTick();

while (HAL_GetTick() - start < interval_in_milliseconds)
{
    // Do the thing
}

使用减法进行计算是安全的,即使滴答计数翻转(uint32_t毫秒计数器每49天翻转一次)。
您的代码示例中缺少一个},因此不清楚初始if中包含哪些位。

相关问题