Для этих целей я настроил таймер1, прерывание происходит каждую секунду, и увеличивает состояние переменной. Вопрос в том,как нужной функиции понять сколько прошло времни.
Формирование временных интервалов
- Сообщения: 768
- Зарегистрирован: Сб ноя 08, 2008 18:32:36
Здравствуйте! Ломаю голову вот над таким вопросом :в программе много процессов которые должны работать строго определенное время)
Для этих целей я настроил таймер1, прерывание происходит каждую секунду, и увеличивает состояние переменной. Вопрос в том,как нужной функиции понять сколько прошло времни.
Для этих целей я настроил таймер1, прерывание происходит каждую секунду, и увеличивает состояние переменной. Вопрос в том,как нужной функиции понять сколько прошло времни.
- Реклама
настраиваешь таймер на квант времени (на наименьшую величину, которая может понадобиться) и в прерывании таймера приращаешь переменную - счетчик. в самой программе поглядываешь на счетчик как на часы.
Добавлено after 2 minutes 26 seconds:
а сколько прошло времени (если "часы" задействованы в нескольких функциях и переводить и сбрасывать их нельзя) можно определить как разницу момента начала и конца интервала.
Добавлено after 2 minutes 26 seconds:
а сколько прошло времени (если "часы" задействованы в нескольких функциях и переводить и сбрасывать их нельзя) можно определить как разницу момента начала и конца интервала.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
можешь завести несколько счетчиков...
скорость хода у них будет одинаковой, а сбрасывать их можно независимо друг от друга.
Добавлено after 3 minutes 7 seconds:
извини, не так прочитал, если переполнится - пойдёт сначала, на разности значений это не скажется. если нужны более длинные интервалы - возьми переменную поёмче (другого типа).
скорость хода у них будет одинаковой, а сбрасывать их можно независимо друг от друга.
Добавлено after 3 minutes 7 seconds:
извини, не так прочитал, если переполнится - пойдёт сначала, на разности значений это не скажется. если нужны более длинные интервалы - возьми переменную поёмче (другого типа).
Последний раз редактировалось Ivanoff-iv Вс авг 12, 2018 10:15:06, всего редактировалось 1 раз.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 768
- Зарегистрирован: Сб ноя 08, 2008 18:32:36
Про несколько счетчиков я уже думал. Просто неохото плодить лишние переменные и усложнять читабельность кода. Есть же более рациональные варианты
- Реклама
Общий совет: используйте OSA - "операционную систему" с диспетчером процессов.
Более конкретный совет может быть и иным, если будем знать, что именно у вас за процессы, и почему они должны быть привязаны ко времени.
Более конкретный совет может быть и иным, если будем знать, что именно у вас за процессы, и почему они должны быть привязаны ко времени.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
если счетчик переполнится во время процесса то ничего не изменится - разность значений будет вычислена правильно. 0x05 - 0xFB = 0x0A
главное, чтобы длительность процесса не былв больше вместимости.
главное, чтобы длительность процесса не былв больше вместимости.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
[uquote="vovik15",url="/forum/viewtopic.php?p=3436024#p3436024"]Есть же более рациональные варианты[/uquote]
Более рациональным вариантом является использование структур.
НЕВОЗМОЖНО избавиться от переменных, если они являются частью отдельной сущности. Попытка объединить часы отдельных процессов сделает эти процессы зависимыми друг от друга. Само по себе сокращение переменных не увеличивает читабельность кода. А чаще всего наоборот - ухудшает. Из-за непонятных заплаток в попытке скрестить ужа и ежа.
Более рациональным вариантом является использование структур.
НЕВОЗМОЖНО избавиться от переменных, если они являются частью отдельной сущности. Попытка объединить часы отдельных процессов сделает эти процессы зависимыми друг от друга. Само по себе сокращение переменных не увеличивает читабельность кода. А чаще всего наоборот - ухудшает. Из-за непонятных заплаток в попытке скрестить ужа и ежа.
- Сообщения: 768
- Зарегистрирован: Сб ноя 08, 2008 18:32:36
Спасибо за ответы, буду создавать переменные
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
Автоматное программирование и программные таймеры. Цикл статей.
Моя реализация программных таймеров.
Моя реализация программных таймеров.
решение задачи зависит от задачи...
если у человека тини, то РТОС туда не вставить (ну может и вставить, но на всё остальное уже не хватит).
если длительность прерывания некритична - в него можно много счетчиков напихать и проверок,
если критично - то можно и одним обойтись...
а кашы в коде можно при любом подходе как избежать, так и наварить.
если у человека тини, то РТОС туда не вставить (ну может и вставить, но на всё остальное уже не хватит).
если длительность прерывания некритична - в него можно много счетчиков напихать и проверок,
если критично - то можно и одним обойтись...
а кашы в коде можно при любом подходе как избежать, так и наварить.
Для тех, кто не учил магию мир полон физики 
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="vovik15",url="/forum/viewtopic.php?p=3436015#p3436015"]прерывание происходит каждую секунду, и увеличивает состояние переменной.[/uquote]Вы собрались жить вечно? Переменная uint32_t инкрементируемая раз в секунду переполнится через 136 лет.
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
А миллисекунды?VladislavS писал(а):.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
А чего не микросекунды? Читаю вопрос ТС. Чётко сказано "прерывание происходит каждую секунду"
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Что мешает взять МК с большим объемом памяти?Ivanoff-iv писал(а):если у человека тини, то РТОС туда не вставить
uint64_t.Demiurg писал(а):А миллисекунды?
- Сообщения: 768
- Зарегистрирован: Сб ноя 08, 2008 18:32:36
Мне не нужны милисеккунды, в моей программе секундные паузы. Создал 12 переменных,все инкрементируются в прерывании
Используются "системные часы" с "крупноформатной" переменной, переполнение которой происходит разок в недельку или значительно большем, чем время пребывания устройства в непрерывно включенном состоянии (при условии, что считает эта переменная микросекунды).
А каждый из самостоятельных процессов имеет две собственных переменных (или одну) для хранения копии с системных часов на момент запуска, которая периодически сравнивается с текущим значением.
Другое дело ежли необходимо вписать интервалы внутрь заданного.
Тогда берем таймер и используем блоки сравнения.
В принципе от трех до двух встроенных процессов на Т1 соорудить можно...

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


