比较频繁输入数据并存储MAX和MIN值的快速方法

时间:2018-11-14 19:55:28

标签: c performance embedded

假设我每毫秒输入一次数据。 5秒后,我想输出最后5秒时间窗口的MAX和MIN值。

比较频繁的整数输入数据的最快方法是什么?我举了一个非常简单的例子。通常使用这样的东西不好吗?有没有一种更快的方法,但是不使用数组进行缓冲?

myMainFuntion() {
    int static currentMIN = 30000; // Just initialize to a value that will never be output by getSensorData
    int static currentMAX = 0;
    int static acquisition_counter = 0;

    a = getSensorData() // called each 1 ms
    if (a > currentMAX) {
       currentMAX = a;
    }

    if (a < currentMIN) {
       currentMIN = a;  
    }

    acquisition_counter++;

    if (acquisition_counter == 5000) {
        output(MAX);
        output(MIN);
    }
}

1 个答案:

答案 0 :(得分:4)

看起来还可以,除了一些细节外,您的功能没有太多要优化的地方:

  • 返回类型应为void,而不是省略。
  • a未定义。
  • 您应该输出currentMINcurrentMAX而不是MINMAX
  • 您应该在输出后重置min和max变量的值。
  • 在类型的前面使用static关键字是比较习惯的。

这是修改后的代码:

void myMainFuntion(void) {
    static int currentMIN = 30000; // Just initialize to a value that will never be output by getSensorData
    static int currentMAX = 0;
    static int acquisition_counter = 0;
    int a;

    a = getSensorData() // called every 1 ms
    if (a > currentMAX) {
       currentMAX = a;
    }
    if (a < currentMIN) {
       currentMIN = a;  
    }

    acquisition_counter++;
    if (acquisition_counter == 5000) {
        output(currentMAX);
        output(currentMIN);
        currentMAX = 0;
        currentMIN = 30000;
        acquisition_counter = 0;
    }
}