muravei 3 22 октября, 2005 Опубликовано 22 октября, 2005 · Жалоба Нет ли, у кого исходника для AVR перевода "человеческого" времени в юниксовое на Асме? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 22 октября, 2005 Опубликовано 22 октября, 2005 · Жалоба Нет ли, у кого исходника для AVR перевода "человеческого" времени в юниксовое на Асме? <{POST_SNAPBACK}> Есть, но 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); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться