Страница 1 из 1

Формирование временных интервалов

Добавлено: Вс авг 12, 2018 09:54:20
vovik15
Здравствуйте! Ломаю голову вот над таким вопросом :в программе много процессов которые должны работать строго определенное время)
Для этих целей я настроил таймер1, прерывание происходит каждую секунду, и увеличивает состояние переменной. Вопрос в том,как нужной функиции понять сколько прошло времни.

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:09:12
Ivanoff-iv
настраиваешь таймер на квант времени (на наименьшую величину, которая может понадобиться) и в прерывании таймера приращаешь переменную - счетчик. в самой программе поглядываешь на счетчик как на часы.

Добавлено after 2 minutes 26 seconds:
а сколько прошло времени (если "часы" задействованы в нескольких функциях и переводить и сбрасывать их нельзя) можно определить как разницу момента начала и конца интервала.

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:09:20
vovik15
Ну а если счетчик который в прерывании переполнится,что тогда делать?

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:13:33
Ivanoff-iv
можешь завести несколько счетчиков...
скорость хода у них будет одинаковой, а сбрасывать их можно независимо друг от друга.

Добавлено after 3 minutes 7 seconds:
извини, не так прочитал, если переполнится - пойдёт сначала, на разности значений это не скажется. если нужны более длинные интервалы - возьми переменную поёмче (другого типа).

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:14:59
vovik15
Про несколько счетчиков я уже думал. Просто неохото плодить лишние переменные и усложнять читабельность кода. Есть же более рациональные варианты

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:29:21
ARV
Общий совет: используйте OSA - "операционную систему" с диспетчером процессов.
Более конкретный совет может быть и иным, если будем знать, что именно у вас за процессы, и почему они должны быть привязаны ко времени.

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:45:32
Ivanoff-iv
если счетчик переполнится во время процесса то ничего не изменится - разность значений будет вычислена правильно. 0x05 - 0xFB = 0x0A
главное, чтобы длительность процесса не былв больше вместимости.

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 10:47:08
КРАМ
[uquote="vovik15",url="/forum/viewtopic.php?p=3436024#p3436024"]Есть же более рациональные варианты[/uquote]
Более рациональным вариантом является использование структур.
НЕВОЗМОЖНО избавиться от переменных, если они являются частью отдельной сущности. Попытка объединить часы отдельных процессов сделает эти процессы зависимыми друг от друга. Само по себе сокращение переменных не увеличивает читабельность кода. А чаще всего наоборот - ухудшает. Из-за непонятных заплаток в попытке скрестить ужа и ежа.

Re: Формирование временных интервалов

Добавлено: Вс авг 12, 2018 11:17:29
vovik15
Спасибо за ответы, буду создавать переменные

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 05:13:34
Demiurg
Автоматное программирование и программные таймеры. Цикл статей.
Моя реализация программных таймеров.

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 07:02:16
Ivanoff-iv
решение задачи зависит от задачи...
если у человека тини, то РТОС туда не вставить (ну может и вставить, но на всё остальное уже не хватит).
если длительность прерывания некритична - в него можно много счетчиков напихать и проверок,
если критично - то можно и одним обойтись...
а кашы в коде можно при любом подходе как избежать, так и наварить.

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 08:27:57
VladislavS
[uquote="vovik15",url="/forum/viewtopic.php?p=3436015#p3436015"]прерывание происходит каждую секунду, и увеличивает состояние переменной.[/uquote]Вы собрались жить вечно? Переменная uint32_t инкрементируемая раз в секунду переполнится через 136 лет.

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 08:51:26
Demiurg
VladislavS писал(а):.
А миллисекунды?

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 09:16:48
VladislavS
А чего не микросекунды? Читаю вопрос ТС. Чётко сказано "прерывание происходит каждую секунду"

Re: Формирование временных интервалов

Добавлено: Пн авг 13, 2018 21:49:51
Мурик
Ivanoff-iv писал(а):если у человека тини, то РТОС туда не вставить
Что мешает взять МК с большим объемом памяти? :)
Demiurg писал(а):А миллисекунды?
uint64_t. :)

Re: Формирование временных интервалов

Добавлено: Ср авг 15, 2018 08:03:35
vovik15
Мне не нужны милисеккунды, в моей программе секундные паузы. Создал 12 переменных,все инкрементируются в прерывании

Re: Формирование временных интервалов

Добавлено: Ср авг 15, 2018 08:20:28
BOB51
Используются "системные часы" с "крупноформатной" переменной, переполнение которой происходит разок в недельку или значительно большем, чем время пребывания устройства в непрерывно включенном состоянии (при условии, что считает эта переменная микросекунды).
А каждый из самостоятельных процессов имеет две собственных переменных (или одну) для хранения копии с системных часов на момент запуска, которая периодически сравнивается с текущим значением.
Другое дело ежли необходимо вписать интервалы внутрь заданного.
Тогда берем таймер и используем блоки сравнения.
В принципе от трех до двух встроенных процессов на Т1 соорудить можно...
:roll: