【问题标题】:Ensure loop runs at fixed predefined frequency in C确保循环以 C 中的固定预定义频率运行
【发布时间】:2023-01-13 21:54:24
【问题描述】:

我想在 C 中创建一个 while(1) 循环,它必须以固定的 10,000Hz 频率运行,而不管执行循环中编写的语句所花费的时间。

可以有 2 个退出条件,基于运行时间(假设 1 秒,那么它应该运行 10,000 次,即迭代次数)和基于循环计数(假设 20,000 次迭代,那么理想情况下它应该需要 2 秒的时间)

int loopCount = 0;
while (1) {
    // Some calculations
    // loopCount++; 
    // Check for exit
    // Delay based on frequency 
}

如果我运行所有迭代(10,000 次),则需要超过 1 秒的时间。如果我只运行 1 秒,那么它在循环计数达到 10,000 之前就已经存在。

任何解决方案都会有很大帮助。

使用多个进程跟踪时间的期望解决方案。

【问题讨论】:

    标签: c while-loop delay time-tracking


    【解决方案1】:

    为了精确测量时间,您需要在系统上运行一些计时器,该计时器使用中断并在 while 循环之外执行。

    例如,如果您有一个以 100uS 运行的滴答计时器,它会递增一个名为 tick_counter 的计数器,您可以按以下方式在 while 循环中使用它:

    int loopCount = 0;
    static int current_tick;
    current_tick = tick_counter;
    while (1) {
        // Some calculations
        // loopCount++; 
        // Check for exit
        // Delay based on frequency 
        if( (tick_counter - current_tick) > 10000)
        {
            current_tick = tick_counter; // save the current tick time for next check...
            // do your calculations here...
        }
    }
    

    上面的示例是 1 秒延迟的“硬编码”。 您需要根据需要修改它。

    【讨论】:

      猜你喜欢
      • 2015-09-28
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多