Быстрый способ сравнения частых входных данных и сохранения значений MAX и MIN - PullRequest
0 голосов
/ 14 ноября 2018

Допустим, у меня есть входные данные каждую миллисекунду. Через 5 секунд я хочу вывести значения MAX и MIN последнего временного окна в 5 секунд.

Какой будет самый быстрый способ сравнения частых целочисленных входных данных? Я поставил очень простой пример. Плохо ли вообще использовать что-то подобное? Есть ли более быстрый способ, но без использования массива для буферизации?

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 голосов
/ 14 ноября 2018

Кажется, все в порядке, оптимизировать вашу функцию не нужно, за исключением нескольких деталей:

  • тип возвращаемого значения должен быть void вместо пропущенного.
  • a не определено.
  • вы должны вывести currentMIN и currentMAX вместо MIN и MAX.
  • вы должны сбросить значения 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...