Easyelectronics.ru

Электроника для всех
Текущее время: 19 сен 2019, 07:28

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 11:57 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Скажем, есть такой диспетчер. Как бы вы решили следующий момент. В модуле могут быть запущены несколько таймеров. Когда в модуле на каждый момент времени один таймер, проблемы нет. Но как быть, если таймеров несколько, и задача должны запускаться при каждой итерации основного цикла, диспетчера. На КА это реализуется легко.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 12:09 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
Уточните. Допустим таймерная служба дает нам разрешение 1 мс, и нам нужны несколько задач, которые будут запускаться с периодичностью 1 мс?

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 12:15 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
elisey писал(а):
Уточните. Допустим таймерная служба дает нам разрешение 1 мс, и нам нужны несколько задач, которые будут запускаться с периодичностью 1 мс?

1 задача, несколько таймеров.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 16:21 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1797
Откуда: Новокузнецк
И все равно не понятно. Подробнее опишите. Имеется ввиду несколько аппаратных таймеров? Или несколько таймеров для одной задачи?

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 16:36 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 18:11 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
И все равно непонятно.

Проблема с разработкой функций, вызываемых диспетчером, или с разработкой самого диспетчера?.

Опишите задачу... Более вдохновенно, что-ли...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 18:36 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1578
Откуда: Киев
я посылал сообщения. Собственно у меня вся мультизадачность на сообщениях была. Каждый тик посылалось сообщение "тикнуло", и кому надо, тот то и прокручивал.

PS. И одним диспетчером сыт не будешь. Межпроцессное взаимодействие должно быть. А в случае с вытесняйкой - еще и потокобезопасное


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 03 сен 2014, 19:32 
Заглядывает иногда

Зарегистрирован: 27 янв 2014, 22:32
Сообщения: 113
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

Что такое автоповтор??? Может алгоритм блок-схемой представить, для наглядности...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 12:20 
Старожил

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 617
Откуда: Челябинск
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

А какие проблемы, если таймеры программные? Допустим, таймер выдает метки времени с периодом 100 мкс. Введите в процедуру прерывания по таймеру N счетчиков, акждый из которых отсчитывает заданный для него интервал времени: для одного, скажем, - 100, для друго - 500, и т.д. При достижении заданного числа некоторым счетчиком выставляется соответствующий флаг события. В основной программе эти флажки проверяются. Или нет?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 13:11 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1578
Откуда: Киев
Bill писал(а):
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

А какие проблемы, если таймеры программные?


Да ладно, за месяц ТС уже прочитал и всем советует цикл статей Татарчевского


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 13:43 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Steel.ne писал(а):
Да ладно, за месяц ТС уже прочитал и всем советует цикл статей Татарчевского

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 13:53 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Bill писал(а):
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

А какие проблемы, если таймеры программные? Допустим, таймер выдает метки времени с периодом 100 мкс. Введите в процедуру прерывания по таймеру N счетчиков, акждый из которых отсчитывает заданный для него интервал времени: для одного, скажем, - 100, для друго - 500, и т.д. При достижении заданного числа некоторым счетчиком выставляется соответствующий флаг события. В основной программе эти флажки проверяются. Или нет?


Видите ли, это форум приверженцев диспетчеров и RTOS. Мне на диспетчеры начхать с высокой колокольни. Я попробовал, особого удобства, удовольствия не увидел. Насколько я понял оппонентов, им диспетчер нужен для периодического запуска, или через заданный промежуток времени. А это легко реализуется в обычном main со списком функций и на автоматах. Если функция простая, то на флагах.

Если сложный проект, то остается только RTOS.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 19:46 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Преимущество диспетчера в том, что он лучше масштабируется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 30 сен 2014, 23:20 
Заглядывает иногда

Зарегистрирован: 27 янв 2014, 22:32
Сообщения: 113
demiurg1978 писал(а):
Bill писал(а):
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

А какие проблемы, если таймеры программные? Допустим, таймер выдает метки времени с периодом 100 мкс. Введите в процедуру прерывания по таймеру N счетчиков, акждый из которых отсчитывает заданный для него интервал времени: для одного, скажем, - 100, для друго - 500, и т.д. При достижении заданного числа некоторым счетчиком выставляется соответствующий флаг события. В основной программе эти флажки проверяются. Или нет?


Видите ли, это форум приверженцев диспетчеров и RTOS. Мне на диспетчеры начхать с высокой колокольни. Я попробовал, особого удобства, удовольствия не увидел. Насколько я понял оппонентов, им диспетчер нужен для периодического запуска, или через заданный промежуток времени. А это легко реализуется в обычном main со списком функций и на автоматах. Если функция простая, то на флагах.

Если сложный проект, то остается только RTOS.

Ну как бе если вам ртос нужен лишь для задержек - мне вас жалко. Когда будете изобретать cli, ознакомьтесь с freertos, мб что-то поймете.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 10:46 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
celeron366 писал(а):
Ну как бе если вам ртос нужен лишь для задержек - мне вас жалко. Когда будете изобретать cli, ознакомьтесь с freertos, мб что-то поймете.

Вы вообще внимательно читаете мои сообщения? Где я писал, что мне диспетчеры, RTOS нужны только для задержек?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 13:19 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
demiurg1978.
Я вами весьма недоволен. Нечего наводить помехи на образующиеся умы. Цикл Татарчевского далеко не лучший учебный материал, а концепция, описанная в его статьях - всего-лишь одна из возможных.

Тема организации программ не для новичков. И не для их мизерных проектов. Не нужно советовать Татарчевского всем подряд без разбора в ультимативной форме.

Ну, я перегибаю немножко, конечно. Но, это чтобы смысл мессаджа был лучше очерчен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 13:33 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Mirmik писал(а):
demiurg1978.
Я вами весьма недоволен. Нечего наводить помехи на образующиеся умы. Цикл Татарчевского далеко не лучший учебный материал, а концепция, описанная в его статьях - всего-лишь одна из возможных.

Есть мое и ваше мнения. Доволен-недоволен, вопрос десятый. Тут все расставляет опыт и время. Как раз диспетчеры опасны для новичков. Как я уже написал, автоматное программирование НИКАКОГО отношения не имеет к диспетчерам и RTOS. Функцию можно написать из дикой мешанины флагов, условий и так далее. И можно проанализировать, и если есть явные состояния, написать с применением КА.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 13:40 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Они в равной степени опасны для новичков тем, что сужают кругозор.

Но, вернемся к теме. Автоматное программирование имеет самое прямое отношение к диспетчерам, поскольку решают они одну и туже задачу построения "псевдокооперативной" многозадачности. Тоесть многозадачность без вытеснения.

Вот RTOS - это уже вытеснение, поэтому и тема действительна совсем другая.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 13:55 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Mirmik писал(а):
...

Я считаю, что спор можно разрешить простым способом. Приведите свой пример, скажем опрос матричной клавиатуры, с удержанием, автоповтором. Условия: без КА, диспетчера, и RTOS. Самостоятельный модуль.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 14:01 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Что такое "удержание и автоповтор"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 14:14 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Mirmik писал(а):
Что такое "удержание и автоповтор"?

И вы еще говорите что вы мной "недовольны"? Есть короткое нажатие. Есть длительное нажатие. Если нажали на кнопку и держим ее - удержание. Если в проекте требуется, то при удержании включается автоповтор, через заданные временные промежутки модуль клавиатуры выдает код нажатой клавиши.
Сочетания удержание-автоповтор могут быть разные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 14:20 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
То есть запрограммировать поведение, аналогичное поведению компьютерной клавиатуры?.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 14:26 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
Mirmik писал(а):
То есть запрограммировать поведение, аналогичное поведению компьютерной клавиатуры?.

Да. Условия я обозначил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 849
Ну, на скорую руку...



Код:

enum _mode{
SCAN=0;
TEST;
RETENTION
};

enum key_stat_t{
TAPED=0;
USED;
};

class flag{
uint8_t flg;
public:
void set(..){..};
void clr(..){..};
bool sts(..){..};
};

class matrix_key_var
{
uint8_t n;
uint8_t m;
flag status;
unsigned long long start;
unsigned long long last;
public:
void operator++() {if (++n == NMAX) {n=0;m++}; if (m == MMAX) m=0;};
bool check() {............};
} key;


void request{
if (key.status.sts(TAPED))
   {
   unsigned long long m = millis();
   if ((m - key.start < RETENTION_TIME) && (!key.status.sts(USED))) 
      {GOGOGOGOGO(key);
      last = m;
      key.status.set(USED);
      goto exit;};
      
   if  (m - key.last < AUTORETURN)
      {
      GOGOGOGOGO(key);
      last = m;
      goto exit;
      };   
   };
exit:
request_key();
};


void request_key()
{
static int16_t acc;
switch (mode){
case SCAN:
   key.status.clr(TAPED);
   key.status.clr(USED);
   key.start = millis();
   acc=0; key++;
case TEST:
   key.check() ? acc++ : acc--;
   if (acc < 0) {mode = SCAN; break;};
   if (acc > RETENTION_LIMIT) {mode=RETENTION; acc = RETENTION_LIMIT + RETENTION_BUFFER; break;};
   mode = TEST; break;
case RETENTION:
   key.check() ? acc++ : acc--;
   if (acc > RETENTION_LIMIT + RETENTION_BUFFER) acc = RETENTION_LIMIT + RETENTION_BUFFER;
   if (acc < RETENTION_LIMIT) {mode = SCAN; break;}; //exit
   key.status.set(TAPED);
};
};





Много лишних переменных. Можно оптимизировать.
Да и отладить не мешало бы.


Последний раз редактировалось Mirmik 01 окт 2014, 15:58, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Использование диспетчеров. Таймеры
СообщениеДобавлено: 01 окт 2014, 15:30 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3534
Откуда: Новосибирск
С++ не знаю. Без комментариев тяжело читать. У вас там пустышки? Напишите нормальный пример.
Show


Последний раз редактировалось demiurg1978 01 окт 2014, 15:32, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 82 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB