Цитата(muravei @ Oct 22 2005, 06:31)
Нет ли, у кого исходника для AVR перевода "человеческого" времени в юниксовое на Асме?
Есть, но 2 но.
1. На С - откомпилируй, например, иаром, и из листинга возьми асм-код
2. Считает от 1 янв 2000г, а в унихе 1 янв 1970, довольно просто лечится вычитанием/прибавлением константы к количеству секунд.
// Количество дней на начало месяца
__flash int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365};
// Преобразование времени и даты в количество секунд после 01-01-2000 00:00
unsigned long TimeDate2Long(char hrs, char min,char sec,char day,char mon,char yrs)
{
unsigned long iday;
iday=365*yrs+DMonth[mon-1]+(day - 1);
iday=iday+(yrs>>2);
if (mon>2||(yrs&3)>0)
iday++;
return(sec+60*(min+60*(hrs+24* iday)));
}
// Печать даты и времени по количеству секунд с 01-01-2000 00:00
void PrintTimeDate(char *p, unsigned long x)
{
char sec,min,hrs,mon,yrs;
unsigned int day,iday,day4,yrs4;
sec=x%60;
min=(x/60)%60;
hrs=(x/3600)%24;
iday=x/86400;
yrs4=x/((4*365+1)*86400);
day4=iday%(4*365+1);
iday=(day4==(31+28));
if (day4>=(31+28)) day4--;
yrs=(yrs4<<2)+day4/365;
day=day4%365;
mon=0;
while (DMonth[++mon]<=day);
day-=DMonth[mon-1];
if (iday) day++;
day++;
if (yrs>99) yrs=0;
sprintf_P(p,(STR)"%02d:%02d:%02d %02d-%02d-%02d",hrs,min,sec,day,mon,yrs);
}
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин