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

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Здравствуйте! Ломаю голову вот над таким вопросом :в программе много процессов которые должны работать строго определенное время)
Для этих целей я настроил таймер1, прерывание происходит каждую секунду, и увеличивает состояние переменной. Вопрос в том,как нужной функиции понять сколько прошло времни.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

настраиваешь таймер на квант времени (на наименьшую величину, которая может понадобиться) и в прерывании таймера приращаешь переменную - счетчик. в самой программе поглядываешь на счетчик как на часы.

Добавлено after 2 minutes 26 seconds:
а сколько прошло времени (если "часы" задействованы в нескольких функциях и переводить и сбрасывать их нельзя) можно определить как разницу момента начала и конца интервала.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Ну а если счетчик который в прерывании переполнится,что тогда делать?
Последний раз редактировалось vovik15 Вс авг 12, 2018 10:12:33, всего редактировалось 1 раз.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

можешь завести несколько счетчиков...
скорость хода у них будет одинаковой, а сбрасывать их можно независимо друг от друга.

Добавлено after 3 minutes 7 seconds:
извини, не так прочитал, если переполнится - пойдёт сначала, на разности значений это не скажется. если нужны более длинные интервалы - возьми переменную поёмче (другого типа).
Последний раз редактировалось Ivanoff-iv Вс авг 12, 2018 10:15:06, всего редактировалось 1 раз.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Про несколько счетчиков я уже думал. Просто неохото плодить лишние переменные и усложнять читабельность кода. Есть же более рациональные варианты
Контактная информация:
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Общий совет: используйте OSA - "операционную систему" с диспетчером процессов.
Более конкретный совет может быть и иным, если будем знать, что именно у вас за процессы, и почему они должны быть привязаны ко времени.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

если счетчик переполнится во время процесса то ничего не изменится - разность значений будет вычислена правильно. 0x05 - 0xFB = 0x0A
главное, чтобы длительность процесса не былв больше вместимости.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Аватара пользователя
Сообщения: 25399
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

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

Сообщение vovik15 »

Спасибо за ответы, буду создавать переменные
Контактная информация:
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Автоматное программирование и программные таймеры. Цикл статей.
Моя реализация программных таймеров.
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Сообщение Ivanoff-iv »

решение задачи зависит от задачи...
если у человека тини, то РТОС туда не вставить (ну может и вставить, но на всё остальное уже не хватит).
если длительность прерывания некритична - в него можно много счетчиков напихать и проверок,
если критично - то можно и одним обойтись...
а кашы в коде можно при любом подходе как избежать, так и наварить.
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="vovik15",url="/forum/viewtopic.php?p=3436015#p3436015"]прерывание происходит каждую секунду, и увеличивает состояние переменной.[/uquote]Вы собрались жить вечно? Переменная uint32_t инкрементируемая раз в секунду переполнится через 136 лет.
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

VladislavS писал(а):.
А миллисекунды?
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

А чего не микросекунды? Читаю вопрос ТС. Чётко сказано "прерывание происходит каждую секунду"
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Ivanoff-iv писал(а):если у человека тини, то РТОС туда не вставить
Что мешает взять МК с большим объемом памяти? :)
Demiurg писал(а):А миллисекунды?
uint64_t. :)
Опытный кот
Сообщения: 768
Зарегистрирован: Сб ноя 08, 2008 18:32:36

Сообщение vovik15 »

Мне не нужны милисеккунды, в моей программе секундные паузы. Создал 12 переменных,все инкрементируются в прерывании
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15600
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Вернуться в «AVR»