Скажу только, что такой говнокод пишет не Хундай, там 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 часов, это уже достаточно много, чтобы не заметить проблему при тестировании, но при этом достаточно мало, чтобы она ебала мозг в эксплуатации.