Интерпретация целочисленного деления - C код - PullRequest
2 голосов
/ 08 февраля 2020

У меня есть следующий C код:

int count = 0; // relative time
int T1 = 20; // period 1 in ms
int T2 = 50; // period 2 in ms
int T3 = 80; // period 3 in ms
   while (1) {
      if (count%T1 == 0) function1();
      if (count%T2 == 0) function2();
      if (count%T3 == 0) function3();
      count++;
      if (count == T1*T2*T3) count = 0;
      delay(1); // wait for 1 ms
   }

Я хотел бы узнать причину, по которой вместо целого числа == T1 существует целое число делений% T1 == 0. Может быть, это принимает во внимание тот факт, что период T1 не может быть целым числом?

Заранее спасибо.

1 Ответ

6 голосов
/ 08 февраля 2020

Из кода, который вы разместили, это выглядит так:

  • function1 будет называться каждые 20 мс
  • function2 будет называться каждые 50 мс
  • function3 будут называться каждые 80 мс
  • Счетчик сбрасывается при 80 секунд (20 * 50 * 80 мс).

Ключевое слово здесь каждые .

В качестве примера рассмотрим триггер function1.

Если вы напишите count == T1, function1 будет выполнено только один раз перед сбросом, когда count равно 20 .

Если вы хотите запускайте function1 каждые 20 мс, вы ожидаете, что он будет выполняться при 20 мс, 40 мс, 60 мс и т. д.

Чтобы перевести это понятие в код, вы проверяете, делится ли счетчик на 20 через оператор по модулю, следовательно, выражение count % T1.

Та же концепция применима к T2 и T3 проверкам.

...