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

 
 
> родить аналог 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, 08:59
Сообщение #2


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

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



time() возвращает количество секунд от... бла-бла-бла... его можно получить пересчетом регистров RTC функцией mktime.
difftime() это что-то вроде:
double difftime ( time_t time2, time_t time1 )
{
return (time2 - time1);
}


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


Местный
***

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



Цитата(Dron_Gus @ Sep 17 2010, 12:59) *
time() возвращает количество секунд от... бла-бла-бла... его можно получить пересчетом регистров RTC функцией mktime.
difftime() это что-то вроде:
double difftime ( time_t time2, time_t time1 )
{
return (time2 - time1);
}


Да, похоже что надо было искать mktime

но находится оно какое-то некузявое для embedded

http://www.google.com/codesearch/p?hl=ru#e...mktime%20lang:c

Сколько оно будет выполнятся - хз
Go to the top of the page
 
+Quote Post
sasamy
сообщение Sep 17 2010, 09:37
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(evgen2 @ Sep 17 2010, 13:13) *
но находится оно какое-то некузявое для embedded

http://www.google.com/codesearch/p?hl=ru#e...mktime%20lang:c


Мда - зубодробильня какая-то...

On a POSIX system, time_t is an arithmetic type, and one could just define
#define difftime(t1,t0) (double)(t1 - t0)

Реализацию остального можно посмотреть тут
http://prex.sourceforge.net/src/files/1129.html
Go to the top of the page
 
+Quote Post
evgen2
сообщение Sep 17 2010, 09:55
Сообщение #5


Местный
***

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



Цитата(sasamy @ Sep 17 2010, 13:37) *
Мда - зубодробильня какая-то...

On a POSIX system, time_t is an arithmetic type, and one could just define
#define difftime(t1,t0) (double)(t1 - t0)

Реализацию остального можно посмотреть тут
http://prex.sourceforge.net/src/files/1129.html


О, это явно проще, хотя засада очевидно перенесена в isleap(year)

И, как видно из mktime() - этот самый isleap будет нынче вызываться 40 раз, что явно не радует. Впрочем тут явно есть место для оптимизации.

Код
for (year = 1970; year < (unsigned int)(1900 + tmp->tm_year); year++)
               days += DAYSPERNYEAR + (isleap(year) ? 1 : 0);

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
- - VAI   Посмотрите во вложении. Функции преобразования дат...   Sep 17 2010, 09:50
- - Dron_Gus   А зачем каждый раз пересчитывать? У Вас в процессо...   Sep 17 2010, 10:19
- - sasamy   Цитата(Dron_Gus @ Sep 17 2010, 14:19) А з...   Sep 17 2010, 11:08
- - evgen2   Цитата(Dron_Gus @ Sep 17 2010, 14:19) А з...   Sep 17 2010, 11:33
- - 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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