Easyelectronics.ru

Электроника для всех
Текущее время: 19 фев 2020, 12:39

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



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

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

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


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

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

_________________
elisey.su


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

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


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

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

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

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


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

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

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
Сообщения: 1588
Откуда: Киев
Bill писал(а):
demiurg1978 писал(а):
Программные таймеры. Есть задача, в один прекрасный момент нужно запустить несколько программных таймеров и отслеживать их. К примеру, опрос клавиатуры. Держим кнопку 1 с, включается автоповтор. Каждые последующие 1 с время автоповтора уменьшается.

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


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


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

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

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


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

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

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


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

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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
Сообщения: 3578
Откуда: Новосибирск
celeron366 писал(а):
Ну как бе если вам ртос нужен лишь для задержек - мне вас жалко. Когда будете изобретать cli, ознакомьтесь с freertos, мб что-то поймете.

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


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

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

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

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


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

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

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


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

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

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

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

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


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

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

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


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

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


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

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

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


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

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


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

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

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


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

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



Код:

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
Сообщения: 3578
Откуда: Новосибирск
С++ не знаю. Без комментариев тяжело читать. У вас там пустышки? Напишите нормальный пример.
Show


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

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


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


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

Сейчас этот форум просматривают: sdv_cyborg


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

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

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