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

 
 
 
Reply to this topicStart new topic
> Часы в IAR на базе clock(). Секундый таймер IAR.
Dnepr33
сообщение May 27 2014, 04:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



<time.h>
Как перенастроить, если это в принципе возможно, таймер 1-сек, к которому обращается ф-я clock_t clock(void).
Возможно ли задать тактирование таймера для clock() в IAR от вектора аппаратного прерывания внешнего таймера,
например PCF8563 ? ( В <time.h> определены макрос CLOCKS_PER_SEC )

Откуда возник вопрос.
Переход на зимнее-летнее время, будь он неладен. Аппаратные RTC это не поддерживают.
Даты-время-правило перехода определяются законодательно каждым государством.
Как достаточно просто реализовать часы RTC на базе UTC с поддержкой таймзоны и перехода зима-лето ?
( MSP430 )



Go to the top of the page
 
+Quote Post
jcxz
сообщение May 27 2014, 06:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Из часов берёте время, преобразуете его в секунды, выделяете текущее смещение относительно начала года, сравниваете с точками перехода, если находится в летнем интервале -
прибавляете величину смещения летнего времени.
Таким образом - при переходе зима<->лето часы в RTC не модифицируются (readonly).
У меня так в наших счётчиках сделано - так служба времени работает. Главная идея - время в RTC-часах - read only, не записывается
не при переходе зима<->лето, ни даже при корректировках (корректируется всегда дельта, которая потом прибавляется ко времени считанному из RTC).
Так можно безопасно и просто работать с RTC.

PS: Имхо - не в тот раздел написали - к IAR эта тема перпендикулярна.
PPS: В Незалэжной есть летнее время?
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение May 27 2014, 07:41
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Цитата(jcxz @ May 27 2014, 12:18) *
Из часов берёте время, преобразуете его в секунды, выделяете текущее смещение относительно начала года, сравниваете с точками перехода, если находится в летнем интервале -
прибавляете величину смещения летнего времени.
Таким образом - при переходе зима<->лето часы в RTC не модифицируются (readonly).
У меня так в наших счётчиках сделано - так служба времени работает. Главная идея - время в RTC-часах - read only, не записывается
не при переходе зима<->лето, ни даже при корректировках (корректируется всегда дельта, которая потом прибавляется ко времени считанному из RTC).
Так можно безопасно и просто работать с RTC.

PS: Имхо - не в тот раздел написали - к IAR эта тема перпендикулярна.
PPS: В Незалэжной есть летнее время?


Да, я предполагаю запустить внешний RTC в режиме UTC. Он выдает аппаратно прерывание на процессор, где в обработчике можно и (или) вести счет секунд и преобразовывать из HHMMYYYY ... в секунды с 1970 или 1900 (прием из RTC по I2C). А "локальное" время получаем корректировкой на выдачу для экрана-отчета в зависимости от временной зоны и зима-лето-daylight.
А в IAR вопрос - тк. именно специфика IAR - прикрутить свой секундный обработчик для подсистемы времени, к которой обращается time();
(извиняюсь, перепутал с clock() ).

pps sm.gif обовязково !!! мыж в эвропе, а по ихним стандартам без DST низзя никак. IMHO
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 27 2014, 14:36
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Dnepr33 @ May 27 2014, 17:51) *
Да, я предполагаю запустить внешний RTC в режиме UTC. Он выдает аппаратно прерывание на процессор, где в обработчике можно и (или) вести счет секунд и преобразовывать из HHMMYYYY ... в секунды с 1970 или 1900 (прием из RTC по I2C). А "локальное" время получаем корректировкой на выдачу для экрана-отчета в зависимости от временной зоны и зима-лето-daylight.

Да, именно так. Из RTC читать нужно только один раз - при старте ПО.
Такой алгоритм у меня используется во многих коммерческих проектах.
Ещё у такого метода есть существенный плюс: возможность корректировок на величины менее секунды (у нас с точностью до 1 мс), но
никаких проблем хоть 1мкс (тока смысла уже мало из-за точности кварца).
Секунды я считаю не от прерывания RTC, а от идущего когерентно с ним таймерного прерывания. А таймерное прерывание я без проблем
сдвину на любую необходимую фазу (шаг делителя таймера == 1мкс, так что минимальная величина корректировки хода часов == 1мкс).
Так что при миллисекундной корректировке у меня меняется разность фаз прерываний RTC и таймера.
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение May 28 2014, 11:33
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Согласен. Я тоже делаю нечто подобное, есть внутренний таймер 2с. Можно перенастроить на 1с, а 2с получать программно.
-----
Вы использовали в IAR ф-ю getzone() ?
В версии для MSP430 она должна возвращать строку-правило коррекции зима-лето.
Вроде этой.
":GMT+10:GMT+11:0900:(1990)010100-0:040102-0:100102-0"
Но в ф-ии возврат дает только ":". Я так понял, ее нужно перекомпилировать для каждой таймзоны (или нескольких зон)
Эту ф-ю в дальнейшем использует localtime();
Не хотелось бы "изобретать лисапет". Может подскажете, есть ли поддержка зима-лето (daylight) коррекции в IAR ?
Может тема уже обсуждалась, но я не нашел.
Спасибо за ответ sm.gif
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение May 29 2014, 01:53
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Собственно это IAR не касается.
Зимне-летние "страдания" http://electronix.ru/forum/index.php?showt...amp;hl=Daylight
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 29 2014, 01:57
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Dnepr33 @ May 28 2014, 21:43) *
Вы использовали в IAR ф-ю getzone() ?

Нет. Всё сам.
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение May 29 2014, 03:04
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Цитата(jcxz @ May 29 2014, 08:07) *
Нет. Всё сам.


Понятно. респект.

Вот нашел по IAR аналогичный моему вопрос - но без ответов sad.gif
http://stackoverflow.com/questions/2352993...ench-for-msp430


Сообщение отредактировал Dnepr33 - May 29 2014, 03:05
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение May 29 2014, 04:22
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Вот что пишется в док (EWRX_CompilerReference.ENU.pdf) на IAR
----------------
Time: (для MSP430)
To make the __time32, __time64, and date functions work,
you must implement the functions:
clock,
__time32,
__time64, and
__getzone.
Whether you use __time32 or __time64 depends on which interface you use for time_t, see time.h, page 304.
To implement these functions does not require that you rebuild the library. You can find
source templates in the files clock.c, time.c, time64.c, and getzone.c in the
430\src\lib directory. For information about overriding default library modules, see
Overriding library modules, page 90.
If you decide to rebuild the library, you can find source templates in the library project
template. For more information, see Building and using a customized library, page 91.
The default implementation of __getzone specifies UTC (Coordinated Universal
Time) as the time zone.
Note: If you link your application with support for I/O debugging, the functions clock
and time are replaced by C-SPY variants that return the host clock and time
respectively. For more information, see Application debug support, page 87.
------------------

Это замечательно, где бы найти пример реализаций и методику перекомпоновки библиотек ?

Сообщение отредактировал Dnepr33 - May 29 2014, 04:41
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 29 2014, 05:34
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Dnepr33 @ May 29 2014, 11:32) *
Это замечательно, где бы найти пример реализаций и методику перекомпоновки библиотек ?

Чукча писатель?
Цитата(Dnepr33 @ May 29 2014, 11:32) *
To implement these functions does not require that you rebuild the library. You can find
source templates in the files clock.c, time.c, time64.c, and getzone.c in the
430\src\lib directory.



--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Dnepr33
сообщение Jun 2 2014, 04:49
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 1-02-11
Из: Днепропетровск
Пользователь №: 62 622



Все есть и все работает. Как - будем тестировать.
Надо внимательно читать ф. ctime.c ctime64.c gmtime.c gmtime_i.c gmtime64.c localtim.c localtim_i.c localtim64.c
mktime.c mktime64.c setlocale.c xgetdst.c xisdst.c xisdst64.c xisdstData.c xthreads.c xtime.h.
------
Вопрос. В IAR неДоДокументирована работа с временем, касаемо daylight, timezone ?
Go to the top of the page
 
+Quote Post
alexp74
сообщение Sep 12 2015, 15:15
Сообщение #12





Группа: Участник
Сообщений: 11
Регистрация: 20-05-15
Пользователь №: 86 787



Цитата(Dnepr33 @ Jun 2 2014, 07:49) *
Все есть и все работает. Как - будем тестировать.
Надо внимательно читать ф. ctime.c ctime64.c gmtime.c gmtime_i.c gmtime64.c localtim.c localtim_i.c localtim64.c
mktime.c mktime64.c setlocale.c xgetdst.c xisdst.c xisdst64.c xisdstData.c xthreads.c xtime.h.
------
Вопрос. В IAR неДоДокументирована работа с временем, касаемо daylight, timezone ?

Тема увлекательная, только библиотека IAR так писана, что вроде как строка TZ парсится только первый раз, а потом только через танцы с бубном. И это не переносимо. Так что лучше самому реализовать...

Сообщение отредактировал alexp74 - Sep 12 2015, 15:15
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:52
Рейтинг@Mail.ru


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