реклама на сайте
подробности

 
 
> родить аналог difftime() и time()
evgen2
сообщение Sep 16 2010, 23:03
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Граждане, не подскажете, где бы взять исходники аналога функции difftime() в обычных сях ?

Есть RTC, есть регистры, из которых можно родить структуру со временем. Но как ее перевести в секунды с начала хоть 1970, хоть 1980 или любого другого года - непонятно (или, что тоже самое - родить аналог time() ). Задача состоит в определении интервала времени между событиями порядка часов-суток-месяцев. При этом не хотелось бы промахиваться мимо тазика в районе 28-29 февраля...

UPDATE: с удивлением обнаружил \Keil\ARM\RV31\INC\time.h Почему я это не нашел ночью - не знаю. В хелпе обещают, что

* mktime() and localtime() can be used immediately
* time() and clock() are system-specific and probably not usable unless reimplemented
* asctime(), ctime(), and strftime() require locale.



Сообщение отредактировал evgen2 - Sep 17 2010, 09:30
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dron_Gus
сообщение Sep 17 2010, 10:19
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861



А зачем каждый раз пересчитывать? У Вас в процессоре же есть прерывания с известным периодом? Тики операционки или еще что? Ну и делайте раз в секунду cur_time++; И вместо пересчета просто возвращайте текущее значение. Можно синхронизироваться периодически с внешними часами.


--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
Go to the top of the page
 
+Quote Post
evgen2
сообщение Sep 17 2010, 11:33
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 236
Регистрация: 1-04-06
Пользователь №: 15 688



Цитата(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.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- evgen2   родить аналог difftime() и time()   Sep 16 2010, 23:03
- - Dron_Gus   localtime() mktime() Вам в помощь. (time.h)   Sep 17 2010, 06:48
|- - evgen2   Цитата(Dron_Gus @ Sep 17 2010, 10:48) loc...   Sep 17 2010, 07:47
|- - _Pasha   Цитата(evgen2 @ Sep 17 2010, 11:47) и ник...   Sep 17 2010, 08:20
|- - evgen2   Цитата(_Pasha @ Sep 17 2010, 12:20) если ...   Sep 17 2010, 08:41
- - Dron_Gus   Не знаю, что за компилятором Вы пользуетесь (Вы ег...   Sep 17 2010, 08:19
|- - evgen2   Цитата(Dron_Gus @ Sep 17 2010, 12:19) Не ...   Sep 17 2010, 08:25
- - Dron_Gus   Похоже в MDK их действительно нет. Тогда http://ww...   Sep 17 2010, 08:27
- - Dron_Gus   time() возвращает количество секунд от... бла-бла-...   Sep 17 2010, 08:59
|- - evgen2   Цитата(Dron_Gus @ Sep 17 2010, 12:59) tim...   Sep 17 2010, 09:13
|- - sasamy   Цитата(evgen2 @ Sep 17 2010, 13:13) но на...   Sep 17 2010, 09:37
|- - evgen2   Цитата(sasamy @ Sep 17 2010, 13:37) Мда -...   Sep 17 2010, 09:55
- - VAI   Посмотрите во вложении. Функции преобразования дат...   Sep 17 2010, 09:50
- - sasamy   Цитата(Dron_Gus @ Sep 17 2010, 14:19) А з...   Sep 17 2010, 11:08
- - Dron_Gus   Цитата(evgen2 @ Sep 17 2010, 15:33) mktim...   Sep 17 2010, 11:39
- - evgen2   Цитата(Dron_Gus @ Sep 17 2010, 15:39) tim...   Sep 17 2010, 19:21


Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016