Цитата(Dron_Gus @ Sep 17 2010, 14:19)

А зачем каждый раз пересчитывать? У Вас в процессоре же есть прерывания с известным периодом? Тики операционки или еще что? Ну и делайте раз в секунду cur_time++; И вместо пересчета просто возвращайте текущее значение. Можно синхронизироваться периодически с внешними часами.
есть RTC - real time clock, которая запитывается от батарейки. В промежутках между событиями процессор может быть выключен. Сами события, т.е. времена записываются или во флеш или в Battery RAM.
Сам промежуток может быть большим, так что к прерываниям привязываться стремно, даже если питание не выключается.
В принципе решение лежало на поверхности, но, почему-то я умудрился его не найти ;-)
В Keile есть "time.h" из которого можно использовать mktime, предварительно заполнив поля struct tm
Код
void RTC_GetTime(struct tm *t)
{
t->tm_sec = RTC_SEC; /* seconds after the minute, 0 to 60
(0 - 60 allows for the occasional leap second) */
t->tm_min = RTC_MIN; /* minutes after the hour, 0 to 59 */
t->tm_hour = RTC_HOUR; /* hours since midnight, 0 to 23 */
t->tm_mday = RTC_DOM; /* day of the month, 1 to 31 */
t->tm_mon = RTC_MONTH; /* months since January, 0 to 11 */
t->tm_year = RTC_YEAR-1900; /* years since 1900 */
t->tm_wday = RTC_DOW; /* days since Sunday, 0 to 6 */
t->tm_yday = RTC_DOY; /* days since January 1, 0 to 365 */
t->tm_isdst = 0; /* Daylight Savings Time flag */
}
mktime() вопреки ожиданиям не тормозит, а вот стандартной time() пользоваться нельзя, оно возвращает -1.