Задача. Монотонно растущий счетчик времени который в какой то момент может переполнится.
Код делает типовые операции
uint16_t startTime = millis();
...
uint16_t stopTime = millis();
uint16_t runSpeed = stopTime - startTime;
Вопрос что будет если
startTime
будет равно 65535 а stopTime
будет равно 1?Какой будет
runSpeed
?Код теста
//# ./a 1 - 65535
#include <stdio.h>
#include <stdint.h>
int main(int argc, char * argv[]) {
uint16_t a = atoi(argv[1]);
uint16_t b = atoi(argv[3]);
printf("%d", (uint16_t)(a - b));
return 0;
}
Итого все хорошо
1 - 65535
будет равно 2 как и предполагалось. Спасибо бинарной логике процессора. И никаких лишних проверок сравнений лепить не надо.