Перейти к содержанию
    

Добавление временного интервала в RTC

Доброго времени суток. Такой вопрос. Необходимо к текущему времени в RTC добавить интервал времени. При этом произвести учет даты с учетом количества дней в месяце и высокосного года.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, csm7 сказал:

Необходимо к текущему времени в RTC добавить интервал времени. При этом произвести учет даты с учетом количества дней в месяце и высокосного года.

Просто прибавить интервал.

Хотя бы микроконтроллер назвали, тогда можно будет протелепатировать что у вас не получается....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

микроконтроллер stm32l476

void NewAlarm(void)
{
  RTC_TimeTypeDef intervalTime;
  intervalTime.Seconds = 40;
  intervalTime.Minutes = 30;
  intervalTime.Hours = 11; //24h
  
  HAL_RTC_GetTime(&hrtc, &sTime, FORMAT_BIN);
  HAL_RTC_GetDate(&hrtc, &sDate, FORMAT_BIN);
  
  sTime.Seconds += intervalTime.Seconds;
  sTime.Minutes += intervalTime.Minutes;
  sTime.Hours += intervalTime.Hours;  
  
}

Я Вас правильно понимаю, что можно так просто добавить интервал времени и модуль RTC автоматом все учтет. (рассчитает правильное время и дату)

Изменено пользователем csm7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 часов назад, csm7 сказал:

Доброго времени суток. Такой вопрос. Необходимо к текущему времени в RTC добавить интервал времени.

Необходимо - добавляйте. Или разрешения спрашиваете?  :scratch_one-s_head:

5 часов назад, csm7 сказал:

Я Вас правильно понимаю, что можно так просто добавить интервал времени и модуль RTC автоматом все учтет. (рассчитает правильное время и дату)

Перевести время/дату в число секунд (от некоторой базовой даты), прибавить смещение, перевести обратно. Всё.  :unknw:

 

PS: В некоторых МК RTC умеет работать сразу в удобном формате - в числе секунд, без всяких ущербных дней/месяцев/... и т.п. Хотя это пожалуй не про STM...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 minutes ago, jcxz said:

Перевести время/дату в число секунд (от некоторой базовой даты), прибавить смещение, перевести обратно. Всё.  :unknw:

 

Все уже давно "украдено до нас". Надо только найти сниппеты, которые переводят дату в секунды от 1970 года, например, и секунды обратно в дату. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Aleksandr Baranov сказал:

Все уже давно "украдено до нас". Надо только найти сниппеты, которые переводят дату в секунды от 1970 года, например, и секунды обратно в дату. 

Зачем в 2020-м году использовать 1970-й как базу?  :scratch_one-s_head:

А для перевода числа во время/дату и обратно, достаточно владеть 4-мя базовыми арифметическими операциями и знать сколько дней в каждом месяце.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 hours ago, csm7 said:

Я Вас правильно понимаю, что можно так просто добавить интервал времени и модуль RTC автоматом все учтет. (рассчитает правильное время и дату)

Смотрим волшебшую функцию http://www.cplusplus.com/reference/ctime/mktime/ 
С ней все можно.
Но тип даты времени надо перевести в http://www.cplusplus.com/reference/ctime/time_t/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, jcxz said:

Зачем в 2020-м году использовать 1970-й как базу?  :scratch_one-s_head:

С этим тезисом согласен. Тоже храню все даты в логах, как секунды с начала 2000 года.

 

2 hours ago, jcxz said:

А для перевода числа во время/дату и обратно, достаточно владеть 4-мя базовыми арифметическими операциями и знать сколько дней в каждом месяце.

А вот здесь есть проблема. В БСЭ было написано, что год делящайся на 4 - високосный, а делящийся на 100 - не високосный.

Но где-то в конце 1999 кто-то принял закон, что если делится на 400 - то високосный.

И было два типа календариков в продаже.

 

Уже несколько лет, периодически, добавляют\убавляют секунду на рубеже смены года.

Так что, не то, что сколько дней - сколько секунд в каком году решают новые законодательные акты, а не формулы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 hours ago, jcxz said:

Зачем в 2020-м году использовать 1970-й как базу?  :scratch_one-s_head:

 

Вот, какую базу готовые функции используют, такую пусть они и используют. Не имеет смысла изобретать изобретенное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, jcxz сказал:

Зачем в 2020-м году использовать 1970-й как базу?

Ну как-бы формат UNIX Time)))

5 часов назад, jcxz сказал:

В некоторых МК RTC умеет работать сразу в удобном формате - в числе секунд, без всяких ущербных дней/месяцев/...

Вот ведь, а по мне как-раз с этим юникстайм и есть ущербный, когда МК имеет в себе аппаратный календарь  - это куда лучше...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, _4afc_ сказал:

Но где-то в конце 1999 кто-то принял закон, что если делится на 400 - то високосный.

Сударь, где вы спали более 400 лет? :sarcastic:  Этот закон принял ещё папа Григорий 13-й в 1582 г. И с тех пор этот календарь называется григорианским.

И что за календарики вы видели - непонятно. По юлианскому стилю что-ль? :sarcastic:  Так и его большевики давно уже отменили.

13 минут назад, mantech сказал:

Ну как-бы формат UNIX Time)))

А зачем? Какой смысл тащить это го$но мамонта в 21-й век и к тому же - в embedded, где нет зависимости от каких-то "библиотек" или системных API (типа WinAPI)?

Цитата

Вот ведь, а по мне как-раз с этим юникстайм и есть ущербный, когда МК имеет в себе аппаратный календарь  - это куда лучше...

Ну да - и когда нужно произвести даже простейшие арифметические операции со временем то начинаются пляски с бубном.

Да даже чтобы просто сохранить - вместо удобного одного 32-битного значения, имеем массив байт. Да ещё размером некратным степени 2. А если потом ещё где-то атомарные операции понадобятся для этого значения - опять лишние проблемы.

Плюсов нет никаких от слова, совсем.

Вы видимо никогда не имели дел с синхронизацией часов на разных устройствах (да ещё работающих в разных часовых поясах), службами времени, журналами событий с метками времени, плавными переводами часов и т.п. Там это всё имеет значние.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 минут назад, jcxz сказал:

Плюсов нет никаких от слова, совсем.

Работал с СТМовским, аллвиннеровским календарем и "счетчиком" в imx6 - первый вариант был лучше и удобнее, ИМХО. И да, прибавлять и вычитать секунды было не нужно))

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, mantech сказал:

первый вариант был лучше и удобнее, ИМХО.

Чем "удобнее"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, jcxz сказал:

Чем "удобнее"?

Не нужно всяких расчетов, аппаратный "будильник" и еще что-то, уже не помню...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, mantech сказал:

Не нужно всяких расчетов,

"Не нужно" для чего? Для описанных мной выше задач? И как их решать тогда на дате/времени вместосчётчика секунд?? Расскажите.

Только что, mantech сказал:

аппаратный календарь и еще что-то, уже не помню...

не понимаю что вы имеете в виду под "аппаратный календарь" и в чём его преимущество, которого нет в счётчике секунд?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...