А в этот раз — не про студентов

Скажу только, что такой говнокод пишет не Хундай, там ISO 26262 пока еще чтут :)

uint32_t cur_timestamp, last_timestamp;

cur_timestamp = GET_SECONDS() & UINT16_MASK;
last_timestamp = storage->timestamp;

if (last_timestamp + TIME_DELTA > cur_timestamp) {
    return;
} else {
    // do something
    storage->timestamp = (uint16_t) cur_timestamp;
}

Студентов я за такое бил по рукам спрашивал — а что будет с вашей программой через 71 минуту (когда так мучили 32-битный микросекундный таймер) или через 49 дней (таймер миллисекундный на этот раз, но те же 32 бита)? 16-битный счетчик секунд, кажется, это кококомбо, тут все встанет раком через 18 часов, это уже достаточно много, чтобы не заметить проблему при тестировании, но при этом достаточно мало, чтобы она ебала мозг в эксплуатации.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *