Цитата(Dog Pawlowa @ Aug 27 2009, 10:43)

Насколько я понимаю, она возвращает указатель на структуру tm, создаваемую компилятором в статической памяти
Не бязательно, но где-то....
Цитата
И? куда деваться ембеддеру?
В библиотеках обычно есть функция для внутреннего пользования библиотеки c указателем - можно ее найти и пользовать.
Или просто свою написать, можно и по мотивам библиотечной. У меня с начала 90x "своя" (вроде с борланда тянул), правда стуктура статически выделяется, но подправите

, заодно и "лишнее" выкините
Код
//---------------------------------------------------------------------------
// Fills the time structure tm by translating the unixtime
//
static const char _Days[12] = {
31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
};
static const short _monthDay [13] = {
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365
};
struct tm timex = {
0, 0, 0, 1, 0, 107, 4, 0, 0
}; // 1 jan 2007
//---------------------------------------------------------------------------
struct tm *tmtime( time_t utime, int dst )
{
int i;
int cumdays;
if( utime < 0 )
utime = 0;
utime += timezone*3600L;
timex.tm_sec = (int)(utime % 60);
utime /= 60; // Time in minutes
timex.tm_min = (int)(utime % 60);
utime /= 60; // Time in hours
i = (unsigned)(utime / (1461L*24L)); // Number of 4 year blocks
timex.tm_year = (i << 2);
timex.tm_year += 70;
cumdays = 1461*i;
utime %= 1461L*24L; // Hours since end of last 4 year block
for(;; )
{ int hpery = 365*24;
if( ( timex.tm_year & 3 ) == 0 )
hpery += 24;
if( utime < hpery )
break;
cumdays += hpery/24;
timex.tm_year++;
utime -= hpery;
} // At end, utime is number of hours into current year
if( dst && __isDST( (int)(utime % 24), (int)(utime / 24), 0, timex.tm_year-70 ) )
{ utime++;
timex.tm_isdst = 1;
}
else
timex.tm_isdst = 0;
timex.tm_hour = (int)( utime % 24 );
utime /= 24; // Time in days
timex.tm_yday = (int)utime;
cumdays += (int)utime + 4;
timex.tm_wday = cumdays % 7;
utime++;
if( ( timex.tm_year & 3 ) == 0 )
{ if( utime > 60 )
utime--;
else
{ if( utime == 60 )
{ timex.tm_mon = 1;
timex.tm_mday = 29;
return( &timex );
}
}
}
for( timex.tm_mon = 0; _Days[timex.tm_mon] < utime; timex.tm_mon++ )
utime -= _Days[timex.tm_mon];
timex.tm_mday = (int)(utime);
return( &timex );
}