Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 3 [Все]   Вниз
  Печать  
Автор Тема: Задача: проблесковый маячок с сигналом SOS.  (Прочитано 40250 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« : 21-11-2011 21:21 » 

Предлагаю задачу, пригодную к перерастанию в статью.

Нашей мигалкой заинтересовались производители маячков для небольших тихоокеанских атоллов. Просят доработать конструкцию. Их требования:

  • прожектор, направленный на север, дает красные вспышки (0.5с длительность, 1.5с пауза;
  • прожектор, направленный на юг, дает зеленые вспышки (0.8с длительность, 1.3с пауза);
  • маячок включается с наступлением сумерек датчиком освещенности; включение в светлое время не допускается для экономии аккумуляторных батарей, заряжаемых днем солнечными панелями;
  • имеется аварийная кнопка для потерпевших крушение; по ее нажатию включается белый ненаправленный плафон, выдающий сигнал бедствия SOS азбукой Морзе (длительность точки 0.15с); повторное нажатие выключает сигнал бедствия.

Контроллер имеет один программируемый таймер, выдающий прерывания с заданным периодом (пока считаем, что с любым), и порт, 3 бита которых на вывод управляют соответствующими ключами подачи света, а 1 бит работает на ввод (кнопка с дребезгом на замыкание на землю, подтянутая на плюс питания резистором; аппаратное подавление дребезга отсутствует).

Требуется описание процедуры работы в любом виде (словесное, псевдокод, блок-схема...).
« Последнее редактирование: 21-11-2011 21:27 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-11-2011 06:35 » 

Тайминги на Морзе:

Цитата
International Morse code is composed of five elements:

   1. short mark, dot or 'dit' (·) — 'dot duration' is one unit long
   2. longer mark, dash or 'dah' (–) — three units long
   3. inter-element gap between the dots and dashes within a character — one dot duration or one unit long
   4. short gap (between letters) — three units long
   5. medium gap (between words) — seven units long

1. 0.15
2. 0.45
3. 0.15
4. 0.45
5. 1.05

Для простоты я бы выбрал жесткий интервал 50 мс.

Не задана периодичность посылки SOS. Непрерывная посылка?

Имеет ли смысл посылка SOS в светлое время суток?
« Последнее редактирование: 22-11-2011 06:41 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 22-11-2011 06:58 » 

Не задана периодичность посылки SOS. Непрерывная посылка?

Возьмем серию из 3 посылок подряд с периодом повторения серии минута. Такое усложнение заставит научиться комбинировать короткие и длинные интервалы.

Имеет ли смысл посылка SOS в светлое время суток?

Однозначно нет. Выдача всех световых сигналов блокируется датчиком освещенности.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 22-11-2011 07:25 » 

Следовательно, нажав кнопку днем пользователь не знает, включил он или выключил SOS.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 22-11-2011 07:50 » 

Можно использовать кнопку с экономным индикатором, который показывает состояние триггера вкл/выкл.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 22-11-2011 08:52 » 

Можно использовать кнопку с экономным индикатором, который показывает состояние триггера вкл/выкл.

Предположим, механический индикатор. Тогда днем видна маркировка кнопки, а ночью будет видно по световому сигналу. Но в этом случае кнопка должна быть с механической фиксацией.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 22-11-2011 09:06 » 

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 22-11-2011 10:17 » 

По частям.

Прерывание таймера нужно только для ведения счета (пока для этого).
Количество счетчиков определяется количеством временных отрезков.

Возможны два варианта или комбинация, в зависимости от приоритетов
1. Обработка значений счетчиков в п/п прерывания
2. Обработка значений счетчиков в основном цикле
3. Комбинация.

Обработка счетчиков в прерывании зависит от приоритетов функций и времени на "обслуживание"
Обработка в основном цикле - определяет критичность времени "обслуживания", в случае длительного времени требуется отложенная ветвь обслуживание (своего рода автомат выполнения)

Это все что касалось  мигалок и посылок.


Добавлено через 1 минуту и 25 секунд:
не понятно как в систему заведен индикатор сумерек
« Последнее редактирование: 22-11-2011 10:18 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 22-11-2011 10:32 » 

По частям.

Прерывание таймера нужно только для ведения счета (пока для этого).

Считаем, что:
Контроллер имеет один программируемый таймер, выдающий прерывания с заданным периодом (пока считаем, что с любым)

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

В первом приближении таймер безразмерный, то есть может отсчитать и микросекунду, и минуту без переполнения. Влияние конечной разрядности учтем потом, при реализации.

не понятно как в систему заведен индикатор сумерек

Будем считать, что двоичный пороговый сигнал "темно-светло" заведен на бит m порта n. Сейчас не занимаемся философскими вопросами типа "сумерки - это темно или светло?" или "сколько конкретно люкс нужно для включения и сколько для выключения?". Основной акцент на то, как делать множество дел на одном ядре без ОС.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 22-11-2011 10:53 » 

Цитата
Будем считать, что двоичный пороговый сигнал "темно-светло" заведен на бит m порта n. Сейчас не занимаемся философскими вопросами типа "сумерки - это темно или светло?" или "сколько конкретно люкс нужно для включения и сколько для выключения?". Основной акцент на то, как делать множество дел на одном ядре без ОС.
Имеем 5 бит in/out (2 in, 3 out)

Добавлено через 17 минут и 43 секунды:
Теперь Сразу и почтит все учитывая вышесказанной

Основной цикл
   Обслуживание Север
   Обслуживание Юг
   Опрос и обслуживание SOS
Конец основного цикла

Таймер работает в непрерывном режиме - его задача инкремент счетчиков. Инкремент по прерыванию. Интервал - наименьшее кратное для всех временных параметров (0.5с)

Обнуление счетчиков происходит в  функциях обслуживания


Почему выбрана именно такая система обслуживания и работы контроллера.
Задача не привязывается к жесткой привязке реалтайма. +- 0.01с  в задержке посылки не повлияют на функциональность системы.


Пока за бортом дребезг кнопки SOS  (я пока не определился с режимом опроса и приоритета кнопки.)


Кроме того... про маячки.. можно усложнить Улыбаюсь
в дневное время - работают радиомаяки Улыбаюсь с указанием  координат сам только шо придумал Улыбаюсь )
« Последнее редактирование: 22-11-2011 11:11 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 22-11-2011 11:13 » 

Уточняем по итогам обсуждения.

Входы:
- датчик освещенности;
- тумблер сигнала бедствия.

Выходы:
- красный прожектор;
- зеленый прожектор;
- белый аварийный сигнал.

Все входные-выходные сигналы однобитные.

Внутренние ресурсы:
- программируемый таймер с дискретностью 1 мкс неограниченной разрядности;
- память программ и данных неограниченного объема.

Выполняемые операции:
- в светлое время суток все световые сигналы выключены;
- в темное время подаются сигналы:
  - прожектор, направленный на север, дает красные вспышки (0.5с длительность, 1.5с пауза;
  - прожектор, направленный на юг, дает зеленые вспышки (0.8с длительность, 1.3с пауза);
  - если включен тумблер бедствия, включается белый ненаправленный плафон, выдающий сигнал бедствия SOS азбукой Морзе (длительность точки 0.15с).

P.S. С точки зрения функциональности, конечно, тумблер лучше (нагляднее); но для усложнения задачи лучше все-таки кнопка без фиксации, она заставит отмерять малые интервалы времени (подавление дребезга) на фоне больших (управление лампами).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #11 : 22-11-2011 12:14 » 

Dale, - по формированию Морзе.
Можно сделать достаточно небольшими усилиями универсальный формирователь Морзе.
Таблица char [n][2] - по количеству знаков, которые требуется формировать
Код:
[0][0] - "сигнатура" знака морзе, например А = ( .- )  0x80
[0][1] - длина сигнатуры (для А = 2)
SOS = (...) (- - -) ( ... )  { {0xE0,0x03}, {0x00, 0x03}, {0xE0,0x03}  }
далее - двигаем в нужном направлении.
кажется так  Улыбаюсь
-----
когда планируется выезд на атоллы для отладки  ?
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 22-11-2011 12:20 » 

DneprSMV, м...
здесь не рассматриваются решения
Здесь предлагаются решения


Т.е.

Требуется описание процедуры работы в любом виде (словесное, псевдокод, блок-схема...).

Это не помощь, это просто попытка увидеть видение разработчиков.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 22-11-2011 12:53 » 

Dale, - по формированию Морзе.
Можно сделать достаточно небольшими усилиями универсальный формирователь Морзе.

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

Вот Sla уже предложил вариант - добавить управление радиомаячком. Кто-то захочет такое расширение, кто-то остановится на базовом блоке, а кто-то попросит, скажем, дублировать сигналы бедствия звуком при густом тумане. При дурном подходе к программированию это потребует 4 разные программы (базовая, радиомаяк, ревун, радиомаяк+ревун). При разумном - к базовому модулю будут подключаться модули расширения вместе с плагинами по их обслуживанию. Для этого нужна инфраструктура, в которую морзянка войдет в лучшем случае на третьем-четвертом уровне глубины.

когда планируется выезд на атоллы для отладки  ?

На атоллах лучше загорать, а отлаживаться нужно заранее здесь:

http://club.shelek.ru/viewart.php?id=348
http://club.shelek.ru/viewart.php?id=349
http://club.shelek.ru/viewart.php?id=350
http://club.shelek.ru/viewart.php?id=351
http://club.shelek.ru/viewart.php?id=354
http://club.shelek.ru/viewart.php?id=355
http://club.shelek.ru/viewart.php?id=356
http://club.shelek.ru/viewart.php?id=357
http://club.shelek.ru/viewart.php?id=358

Ну и так далее. Если сделать все по уму, при монтаже на атоллах будем отдыхать.
« Последнее редактирование: 22-11-2011 16:59 от RXL » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #14 : 22-11-2011 13:22 » 

Dale,  "общая архитектура приложения"
Вариант с "главным циклом - 1"
Максимальная длит. гл. цикла - 1 мс
----- Обработчик прерывания ----
Апп. прерываение таймера - 1 мс
Софт-таймер 100 мс  (все временнЫе процессы имеют дискретность не менее 0.1 с)
----- Гл.цикл ----
Реализации N таймеров на базе софт-таймера (по постановке задачи - память - произвольное кол-во)
Опрос вх.сигналов
Обрабока вх. сигналов - дребезг, задержки включения итд
Логика вх.сигналов - формирование флагов состояния
Отработка N-задач по флагам состояния (псевдопараллельное выполнение)
Формирование выходных сигналов на базе фл. состояния
------ / главный цикл ----
Это типовая структура.
Время реакции зависит от длины гл. цикла и может быть от десятков мкс.
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 22-11-2011 13:37 » 

Прошу прощения, для тех кто не понял для чего это.

Цитата: Sla
Эта задача выросла из моего предложения
Цитата
Предлагаю сделать топик, где
Будет поставлена задача

Мигание светодиода, нажатие кнопок и прочее
Определены условия  - возможности железяки

Заслушать мнения и решения без обсуждений.
А оно (предложение) вот отсюда
Цитата
Там должна получиться очередь к таймеру от разных устройств (две мигалки, кнопка с программным подавлением дребезга, генератор кода Морзе)... Эту очередь нужно будет сортировать, синхронизировать задачи... Сначала покажу, какой запутанный, некрасивый и трудно масштабируемый код получается, а потом перейдем к протопотокам.

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

Это нужно для будущей статьи в продолжение Hello Word на микроконтроллерах
чтобы показать как писать софт, как писать тесты, как проводить отладку и прочее.




Добавлено через 1 час, 37 минут и 11 секунд:
С кнопкой SOS прикольно получается, на такой абстрактной модели контроллера.
Offtopic:

На хрена  кнопка SOS, если днем фонари не горят
Поставлю в угол.

В ТЗ не указана возможность работы по прерыванию, от IN pin
На этапе проектирования неизвестно время выполнения п/п управления мигалкой, и, соответственно, основного цикла.

Ограничение на одно прерывание таймера заставляет разбивать логику от управления.
Логика = анализ готовности к выполнению функции (или потухнуть или погаснуть)
Управление = выдача сигнала на pinOut

Вся логика управления сводится к возведению флагов (или изменению состояния автомата управления внешним устройством)

выдача сигналов (управление) - в п/п прерывания от таймера.
Соответственно  и опрос Кнопки SOS производить  в прерывании.
Таймер должен быть настроен на приемлемую для всех случаев частоту срабатывания.
« Последнее редактирование: 22-11-2011 15:14 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 22-11-2011 18:24 » 

В целом, с использованием protothreads (как плоская запись конечного автомата) задача получается несложная.

Глобальные имена:
Код:
// источники внешнего сигнала
var состояние_кнопки_sos
var состояние_датчика_освещенности

// глобальные переменные
var сигнал_sos = false
var световая_посылка_sos = false
var сирена = false

// программные счетчики времени
// время в мс
var счетчик_времени_опроса_кнопки_sos
var счетчик_времени_южного_огня
var счетчик_времени_северного_огня
var счетчик_времени_световой_посылки_sos
var счетчик_времени_посылки_морзе

Процедуры-нити:
Код:
procedure обслуживание_кнопки_sos
  var предыдущее_состояние_кнопки
begin
  предыдущее_состояние_кнопки = 0
  while состояние_кнопки_sos = предыдущее_состояние_кнопки do
    спим()
  end while

  сброс_счетчика_времени(счетчик_времени_опроса_кнопки_sos)

  while счетчик_времени_опроса_кнопки_sos < 100
    спим()
  end while

  if состояние_кнопки_sos = предыдущее_состояние_кнопки then
    return
  end if

  if предыдущее_состояние_кнопки = 1 then
    предыдущее_состояние_кнопки = 0
    сигнал_sos = true
  else
    предыдущее_состояние_кнопки = 1
    сигнал_sos = false
  end if
end

procedure обслуживание_сигнала_sos
  var передача_сигнала
begin
  if состояние_датчика_освещенности = 1 then
    передача_сигнала = сигнал_sos
  else
    передача_сигнала = false
  end if

  световая_посылка_sos = передача_сигнала
  сирена = передача_сигнала
end

procedure обслуживание_световой_посылки_sos
  var счетчик_посылок
begin
  if световая_посылка_sos = false then
    return
  end if

  сброс_счетчика_времени(счетчик_времени_световой_посылки_sos)

  for счетчик_посылок = 1 to 3
    послать_морзе_букву("S")
    послать_морзе_букву("O")
    послать_морзе_букву("S")

    if счетчик_посылок <> 3 then
      послать_морзе_пауза(между_словами)
    end if
  next

  while счетчик_времени_световой_посылки_sos < 60000 do
    спим()
  end while
end

procedure обслуживание_сирены
begin
  // драйвер сирены требует проработки
end

procedure мигание_южным_огнем
begin
  сброс_счетчика_времени(счетчик_времени_южного_огня)
  включить_огонь(зеленый)

  while счетчик_времени_южного_огня < 500 do
    спим()
  end while

  выключить_огонь(зеленый)

  while счетчик_времени_южного_огня < 500 + 1500 do
    спим()
  end while
end

procedure мигание_северным_огнем
begin
  сброс_счетчика_времени(счетчик_времени_северного_огня)
  включить_огонь(красный)

  while счетчик_времени_южного_огня < 800 do
    спим()
  end while

  выключить_огонь(красный)

  while счетчик_времени_южного_огня < 800 + 1300 do
    спим()
  end while
end

procedure обслуживание_морзе
begin
  // позжее
end

Обычные процедуры:
Код:
procedure послать_морзе_букву(буква)
begin
  // позжее
end

procedure послать_морзе_пауза(размер_паузы)
begin
  // позжее
end

Забыл про датчик света...
« Последнее редактирование: 22-11-2011 20:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 22-11-2011 19:09 » 

Dale,  "общая архитектура приложения"
...
Это типовая структура.

Архитектуру пока здесь не смог увидеть.

Сейчас, собственно, два основных вопроса:
1) Как устроен планировщик?
2) Как устроена задача?

Все остальное гораздо менее значимо и может уточняться позже.

Время реакции зависит от длины гл. цикла и может быть от десятков мкс.

На время пока не заморачиваемся. Например, Atmega на частоте 16 МГц дает 16 миллионов инструкций в секунду. У нас процессы измеряются десятыми долями секунды, то есть на одно событие приходится миллион инструкций. Процедуры примитивны, поэтому скорость вычисления можем смело считать бесконечной без потери общности.

Добавлено через 39 минут:
С кнопкой SOS прикольно получается, на такой абстрактной модели контроллера.
Offtopic:

На хрена  кнопка SOS, если днем фонари не горят
Поставлю в угол.

Кнопка притянута за уши и добавлена исключительно из вредности - усложнить задачу. Если бы не эта кнопка, остались бы одни мигалки, и тогда задача получилась бы слишком однородной - по регулярному расписанию переключать биты. Мы могли бы просто составить таблицу, во время очередного прерывания находить наступившие события и реагировать на них. Необходимость обработки ввода и непериодичность кода Морзе нарушают эту идиллию и делают отдельные задания менее похожими друг на друга, заставляя решать задачу распараллеливания в самом общем виде. Это делает задачу гораздо интереснее, пусть даже на реальном маяке это не пригодится.

В ТЗ не указана возможность работы по прерыванию, от IN pin

Теоретически можно, конечно, но кнопке это вряд ли пойдет на пользу - если она сильно дребезжит, девайс начнет вовсю колбасить ненужными прерываниями. Проще периодически осведомляться, как там дела у кнопки, и дождаться момента, когда сигнал устаканится. Однако рассмотреть как вариант - почему бы и нет?

На этапе проектирования неизвестно время выполнения п/п управления мигалкой, и, соответственно, основного цикла.

Без большого ущерба пока можем считать загрузку процессора пренебрежимо малой.

Вся логика управления сводится к возведению флагов (или изменению состояния автомата управления внешним устройством)

Автоматная модель - вполне достойная тема для рассмотрения в статье. Один из способов реализовать действительно устойчиво работающую систему.

выдача сигналов (управление) - в п/п прерывания от таймера.
Соответственно  и опрос Кнопки SOS производить  в прерывании.

Тут возможны варианты.  У нас, конечно, задача довольно вялая по вычислениям, но в общем случае лучше оставлять в прерываниях как можно меньше кода - меньше геморроя с синхронизациями, реентерабельностью и риском потери прерываний. Я предпочитаю модель, когда прерывания лишь сигнализируют о событиях, а фоновые процессы их обрабатывают. Впрочем, я опять навязываю свое решение, а чем больше вариантов мы рассмотрим, тем полезнее для всех сопричастных.
 
Таймер должен быть настроен на приемлемую для всех случаев частоту срабатывания.

Да, находим золотую середину - не слишком часто, чтобы не растрачивать ресурсы попусту (это только в первом приближении у нас производительность бесконечна, на прототипе будет иначе), и не слишком редко, чтобы не потерять точность.
« Последнее редактирование: 22-11-2011 19:48 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #18 : 22-11-2011 20:06 » 

Цитата
Тут возможны варианты.  У нас, конечно, задача довольно вялая по вычислениям, но в общем случае лучше оставлять в прерываниях как можно меньше кода - меньше геморроя с синхронизациями, реентерабельностью и риском потери прерываний. Я предпочитаю модель, когда прерывания лишь сигнализируют о событиях, а фоновые процессы их обрабатывают. Впрочем, я опять навязываю свое решение, а чем больше вариантов мы рассмотрим, тем полезнее для всех сопричастных.
в общем-то я того же мнения. Если ты заметил, то я привожу варианты решения. не рассматривая их ни положительные ни отрицательные моменты.
Хочется получить несколько вариантов обслуживания устройств.
В условиях ограниченных аппаратными решениями (отсутствие аппаратной защиты дребезга), или отсутствия  прерываний от внешних входов.
Кроме того критичность и приоритет входных сигналов. Например, датчик темного времени - можно "отложить"  от обслуживания на секунды. а датчик аварии (SOS) откладывать нельзя ни на мгновение.
Можно затянуть "фронты" Импульсов мигания на сотые доли секунды, Но нельзя пропустить эти сотые в п/п защиты дребезга.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #19 : 22-11-2011 20:07 » 

В целом, с использованием protothreads (как плоская запись конечного автомата) задача получается несложная.

Именно protothreads и планирую сделать центральной темой статьи (для того и затеял историю с маяком). Но для сравнения все равно нужны альтернативные решения, чтобы проанализировать достоинства и недостатки каждого подхода.

Глобальные имена

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

Забыл про датчик света...

Работа с датчиком освещенности, пожалуй, очень хорошо ляжет на паттерн Model-Conductor-Hardware, о котором мы уже говорили, но еще ни разу не реализовали.

Добавлено через 17 минут и 17 секунд:
Например, датчик темного времени - можно "отложить"  от обслуживания на секунды. а датчик аварии (SOS) откладывать нельзя ни на мгновение.

Вообще с аварийной кнопкой тоже не такое уж жесткое реальное время, она ведь пальцем нажимается. Главное - не облениться до такой степени, что человек успеет нажать и отпустить, а мы все еще не удосужились опросить кнопку. Реакция на ввод в десятые доли секунды вполне приемлема, а вывод сигнала и вовсе потерпит секунды без малейшего ущерба.

Можно затянуть "фронты" Импульсов мигания на сотые доли секунды

Затянуть или задержать? Задержать - запросто, никто не заметит. Затянуть - силовые ключи могут не простить...
« Последнее редактирование: 22-11-2011 20:24 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 22-11-2011 20:37 » 

Конечно задержать.

Аварийная кнопка - необходимость расставить приоритеты в обслуживании устройств (пусть и к ней не реалтайм чувствительность).
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 22-11-2011 20:56 » 

Забыл про датчик света...

Работа с датчиком освещенности, пожалуй, очень хорошо ляжет на паттерн Model-Conductor-Hardware, о котором мы уже говорили, но еще ни разу не реализовали.

Добавил (и в пост № 18 тоже).

Код:
procedure обслуживание_сигнала_sos
  var передача_сигнала
begin
  if состояние_датчика_освещенности = 1 then
    передача_сигнала = сигнал_sos
  else
    передача_сигнала = false
  end if

  световая_посылка_sos = передача_сигнала
  сирена = передача_сигнала
end

Возможно, выделение такой простой задачи в отдельный поток - излишество, но это всегда можно переделать в простую функцию.

Глобальные объекты - это условность. Просто на Паскале-подобном псевдоязыке удобнее описать задачу, чем на Си. Проще абстрагироваться от подробностей типа структур и указателей.

Кстати, подача сигнала SOS в нашем случае тоже не требует риалтайма. Куда торопиться то? Уж несколько мс можно и подождать.
« Последнее редактирование: 22-11-2011 21:01 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #22 : 22-11-2011 21:43 » 

Возможно, выделение такой простой задачи в отдельный поток - излишество, но это всегда можно переделать в простую функцию.

Нет, не стоит переделывать, это очень хорошее решение - каждый модуль делает свою простую работу. Есть датчики, которые умеют вводить внешние данные (мерить освещенность), есть исполнительные механизмы, которые умеют выполнять действия (подавать сигналы), и есть координатор, в котором собрана бизнес-логика - он опрашивает показания датчиков, принимает решения и дает команды механизмам. Каждая бизнес-функция хорошо локализована, и ее удобно тестировать.

Глобальные объекты - это условность. Просто на Паскале-подобном псевдоязыке удобнее описать задачу, чем на Си. Проще абстрагироваться от подробностей типа структур и указателей.

Оба (Паскаль и С) - процедурные языки, поэтому хорошо подходят для описания последовательности действий, но не годятся для описания интерфейсов, а нам для архитектуры именно интерфейсы сейчас важнее всего. Тут бы лучше подошло что-нибудь объектно-ориентированное (типа псевдокода на Java), или же диаграммы UML. Опять же, видимость и доступность объектов лучше видно будет.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
v2
Помогающий

ua
Offline Offline

« Ответ #23 : 22-11-2011 22:09 » 

Код: (C++)
//------Hdr.m-------
#define PIN_SOS 0x80
#define PIN_LGH 0x10
#define PIO_SOS 0x08
#define PIO_GRN 0x04
#define PIO_RED 0x02

const char stepT = 1; //~10ms

struct TContext
{
  char Tick, State;  //...  
};

void Live    ();
void Init    (char &Timer);
char GetPin  ();
void SetPio  (char Pio, bool On);

__monitor bool TestEv(char &Ev);

char TickPin (TContext &Inf, char Pin);
bool TickRed (TContext &Inf, char Key);
bool TickGrn (TContext &Inf, char Key);
bool TickSos (TContext &Inf, char Key);

#define INF_Z  {0,0}
#define INF_SET(A,B,C,D) TContext A=INF_Z, B=INF_Z, C=INF_Z, D=INF_Z

//------Main.m-------
void main()
{
  char  Key, EvT = stepT;

  INF_SET(Pin, Red, Grn, Sos);
 
  Init(EvT);
 
  while (1) {
   while ( TestEv(EvT) )
   {
     Key = TickPin(Pin, GetPin() );
   
     SetPio( PIO_RED, TickRed(Red, Key) );
     SetPio( PIO_GRN, TickGrn(Grn, Key) );    
     SetPio( PIO_SOS, TickSos(Sos, Key) );
   }
   Live();
  }
}

//-------Hala.m---------
char *TimerEv;
void Init(char &Timer)
{
  TimerEv = &Timer;
  //...
};
__interrupt void TimerUp()
{
  *TimerEv = 1;
}

void Sleep   ()                  { /*.*/ };
char GetPin  ()                  { /*.*/ };
void SetPio  (char Pio, bool On) { /*.*/ };

//------Core.m-------
__monitor bool TestEv(char &Ev)
{
  if (Ev) { Ev = 0;
    return true;
  } return false;
}
void Live()
{
  Sleep();   // ;)
};        

//------- Task.m---------                              
char TickPin (TContext &Inf, char Pin) { /*.*/ };
bool TickRed (TContext &Inf, char Key) { /*.*/ };  
bool TickGrn (TContext &Inf, char Key) { /*.*/ };
bool TickSos (TContext &Inf, char Key) { /*.*/ };
« Последнее редактирование: 23-11-2011 00:44 от v2 » Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #24 : 23-11-2011 03:23 » 

Вот этого я и опасался - типы, ссылки/указатели, тонкости синтаксиса, рябь в глазах... И никакой самодокументируемости - остается только догадываться, о чем идет речь в данной конкретной строке. C/C++ - это все таки привычно и от того хочется автоматом упрощать.
Паскалеподобный язык (или Algol-подобный) использовался в документации Intel для описания логики работы команд x86. Там я его оценил и с тех пор применяю. Конечно, если есть более выразительный способ - было бы хорошо увидеть сравнительный пример.
« Последнее редактирование: 23-11-2011 03:29 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 23-11-2011 05:04 » 

Паскалеподобный язык (или Algol-подобный) использовался в документации Intel для описания логики работы команд x86. Там я его оценил и с тех пор применяю.

Algol - вообще особая история. Это единственный алгоритмический язык, который я знаю. Для программистов он - примерно как латынь для медиков: мертвый язык, живых носителей не осталось, зато для взаимопонимания профессионалов идеален. Не знаю, как сейчас, а в годы моей учебы он был стандартом для публикации алгоритмов в академических изданиях. Для процедурных дел (вроде описания логики машинных команд) практически идеален. А вот по части архитектуры слабоват, не его это конек...

Конечно, если есть более выразительный способ - было бы хорошо увидеть сравнительный пример.

Очень хорош UML. Вот примеры из недавней статьи:

(статика, архитектура)

(динамика, деятельность)

Добавлено через 4 минуты и 1 секунду:
Код: (C++)
...

Я пока не вникал даже, как это работает. Главный вопрос: как это тестировать?
« Последнее редактирование: 23-11-2011 05:08 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #26 : 23-11-2011 06:30 » 

v2, Улыбаюсь
Мне проще в морду дать, чем объяснить за что  -  так выглядит твое предложение/код
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #27 : 23-11-2011 17:49 » 

В телекоммуникациях еще SDL любят использовать. Особенно всякие Голдштейны. Перекрывает "деятельность" в UML.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #28 : 23-11-2011 19:50 » 

Если стоит речь об экономии электроэнергии, то схема, в которой процессор спит, пробуждаясь лишь по прерываниям, по-моему предпочтительнее, чем холостой цикл, управляемый флагами, выставляемыми по прерываниям.

Непонятны заморочки с кнопкой SOS. Если SOS - это световые импульсы, выдаваемые белой лампой, то кому и зачем нужен какой-то дополнительный индикатор? Неужели не видно, мигает белая лампа или нет.


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

Красный, зелёный и белый - это цвета, зарезервированные для навигационных целей. На судне. Топовый белый огонь, поставленный высоко, светит на 225 градусов (вперёд и по бокам), виден на несколько миль. Боковые огни (слева - красный, справа - зелёный) стоят ниже топового в той же вертикальной плоскости и светят на 112,5 градусов (вперёд и в соответствующий бок). Кормовой огонь расположен ниже топового и светит на 135 градусов (назад). Боковые и кормовой огни послабже топового и видны на меньшем расстоянии. Таким образом, если в темноте виден низкий белый огонь - там судно, ориентированной кормой к наблюдателю. Если вертикально стоящие белый сверху и красный снизу - там судно, ориентированное левым бортом к наблюдателю. Если вертикально стоящие белый сверху и зелёный снизу - там судно, ориентированное правым бортом к наблюдателю. Если виден треугольник с белым сверху и красным и зелёным внизу в углах основания треугольника - судно идёт носом на наблюдателя.

У буксира к кормовому белому огню добавляется ещё один жёлтый огонь.

Есть и круговые огни, светящие на 360 градусов и означающие разные вещи. Например, на топливном танкере горит красный огонь, эквивалентный сигнальному флагу "браво" (красный с косицами), означающий "везу опасный груз". Круговые огни бывают белые, красные, жёлтые, синие, зелёные. Могут гореть непрерывно или мерцать.

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

Береговой маяк также имеет световой треугольник из белого, зелёного и красного огней, при помощи которого задаётся сектор безопасного выхода на маяк (и входа в порт или гавань, если надо).

Сигналы маяков модулированы, и если маяки находятся в общей зоне видимости, каждый маяк обладает собственным законом модуляции светового сигнала (отражённом в картах и справочниках).

Посему предложенное в начале описание маяка не годится. Во-первых, все лампы должны мигать синхронно. Во-вторых, белая лампа тоже должна быть задействована. В-третьих, принципиальным потребительским свойством устройства должна быть возможность настройки закона модуляции сигнала, причём модуляция должна задаваться не только по частоте импульсов, но и по амплитуде, и должна быть возможность формирования сигнальных пакетов (например, две вспышки, пауза, опять две вспышки и т.п.). В-чётвёртых, SOS-сигнализатор должен находиться в другом диапазоне, нежели сигнал маяка. Если маяк световой - SOS можно передавать по радио, если это радио-маяк, то SOS должен быть на другой частоте. Световой SOS на маяке смысла не имеет, т.к. маяк имеет всем известные координаты и его не надо искать - достаточно как-то куда-то сообщить, что нуждающиеся в помощи находятся у маяка.


Далее. Насчёт 50 мс для морзянки, передаваемой световым телеграфом, мне кажется, вы сильно погорячились. А в условиях плохой погоды и болтанки, когда внимание оператора на спасательном корабле или вертолёте рассредоточено (это не радист в своей рубке в тишине, это человек на палубе, на ветру, на волнах) уверенное воспрятие возможно только на сравнительно низких частотах. Поэтому точка Морзе должна иметь световую длительность около 0,3 секунды, т.е. быть в 6 раз длиннее. (Аналогично относительно импульсов маяка - порядка секунд, а то и десятков секунд, но не десятых долей секунды. А вот радиосигналы вполне могут быть длительностью порядка десятых секунды.)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #29 : 23-11-2011 20:00 » 

болтун (ковыряюсь в носу и достаю пачечку попкорна ) Улыбаюсь Улыбаюсь Улыбаюсь
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #30 : 23-11-2011 20:06 » 

В телекоммуникациях еще SDL любят использовать. Особенно всякие Голдштейны. Перекрывает "деятельность" в UML.

Так ведь у SDL и UML общий создатель - Айвар Джейкобсон:

Цитата
В сущности, этот подход использовал то, что мы называем сегодня разработкой, основанной на компонентах. Создателем этого метода был Ивар Джекобсон (Ivar Jacobson). Он руководил этим развитием процесса разработки программного обеспечения в течение многих лет - до периода Objectory.

Язык спецификации и описания

В тот период важнейшим делом стало издание в 1976 году CCITT, международным органом по стандартизации в области телекоммуникаций, Языка спецификации и описания (SDL) функционального поведения телекоммуникационных систем. Этот стандарт, оказавший важное влияние на подход фирмы Эрикссон, определяет систему в виде набора связанных блоков, которые общаются друг с другом исключительно путем обмена сообщениями (названных в стандарте "сигналами"). Каждый блок владеет набором "процессов" (это термин SDL для активных классов). Процесс имеет множество экземпляров, подобно классу в терминологии объектно-ориентированного подхода. Экземпляры процесса обмениваются сообщениями. Рекомендованы диаграммы, специализации которых в UML называются диаграммами классов, диаграммами деятельности, диаграммами кооперации и диаграммами последовательностей.

Итак, SDL был специализированным стандартом объектного моделирования. Периодически обновляемый, он использовался более чем 10 000 разработчиками и поддерживался некоторыми поставщиками утилит. Изначально разработанный более 20 лет назад, он далеко опередил свое время. Однако он был разработан в те времена, когда объектное моделирование было еще не развито. SDL был вытеснен Унифицированным языком моделирования, Unified Modeling Language, который прошел стандартизацию в ноябре 1997 года.
(выделение мое).

http://citforum.ru/book/unifpo/unifpo_pr.shtml

Джейкобсон пришел в Rational из Ericcson, где достиг успехов как раз в части моделирования коммуникационных протокотов. Почти вся динамическая часть UML - его рук дело.
« Последнее редактирование: 23-11-2011 20:08 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #31 : 23-11-2011 20:23 » 

Дим, потребление AVR в активном режиме сравнимо с потреблением одного светодиода. Тут же явно одним светодиодом не обойдется.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #32 : 23-11-2011 20:30 » 

болтун (ковыряюсь в носу и достаю пачечку попкорна ) Улыбаюсь Улыбаюсь Улыбаюсь

Эти сухопутные крысы, эти пресноводные моллюски пытались протолкнуть фуфло вместо маяка, фор-бом-брамсель им в глотку! Не на того напали.

"Мне не нравится этот маяк, сэр".

* SER.mp3 (62 Кб - загружено 230 раз.)
« Последнее редактирование: 23-11-2011 20:33 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #33 : 23-11-2011 20:37 » 

Если я правильно понимаю, основной задачей у нас стоит создание "дубового" устройства?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #34 : 23-11-2011 20:44 » 

Если я правильно понимаю, основной задачей у нас стоит создание "дубового" устройства?

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #35 : 23-11-2011 21:13 » 

Цитата: RXL
Дим, потребление AVR в активном режиме сравнимо с потреблением одного светодиода.
Ну ладно.


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

В связи с этим предложенный Sla цикл опроса, или предложенная мною нагрузка обработчика прерывания таймера вполне достаточны. А многопоточность тут к этой задаче за уши притянута.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #36 : 24-11-2011 05:53 » 

В целом, с использованием protothreads (как плоская запись конечного автомата) задача получается несложная.

Автомат классический.
...
А многопоточность тут к этой задаче за уши притянута.

Итак, в чистом итоге имеем:
  • автомат, поэтому потоки нужны;
  • автомат, поэтому потоки не нужны.
Интересно, третье мнение будет (типа воздержался)?

Цитата
– Да не согласен я.
– С кем? С Энгельсом или с Каутским?
– С обоими.
« Последнее редактирование: 24-11-2011 05:55 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #37 : 24-11-2011 07:12 » 

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

На самом деле, это вполне реализуемо: есть же статус потока, а если не осталось работающих потоков (все в ожидании и два прогона подряд внутреннее состояние switch не изменилось), то можно заснуть до образования событий. Вопрос для подумать.
« Последнее редактирование: 24-11-2011 07:21 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #38 : 24-11-2011 07:52 » 

...можно было бы в промежутках останавливать планировщик до прихода какого-либо аппаратного прерывания.

Конечно. Достаточно лишь в конце цикла планировщика, когда все потоки выполнили свою работу, поставить переход контроллера в спящий режим. Выход из него автоматический по очередному тику таймера.

Разумеется, это если мы ввяжемся в предложенную борьбу за экономию пары миллиампер, тем самым остановив глобальное потепление и подъем уровня мирового океана.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #39 : 24-11-2011 08:31 » 

Предлагаю экономию отложить до следующего раза.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #40 : 24-11-2011 08:39 » 

Предлагаю экономию отложить до следующего раза.

Причем этот раз наступит, когда мы соберемся разработать нечто сверхэкономичное с батарейным питанием. IMHO экономия пары миллиампер в стационарном устройстве находится в опасной близости к безумию. Возни много, результат неощутим.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #41 : 24-11-2011 09:59 » 

Цитата
Возни много, результат неощутим.
Ощутим...
Срок службы девайса от автономного питания - 1год.
Девайс сейчас считает расход воды и отправляет данные по GPRS.
Если бы не спал - месяц.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #42 : 24-11-2011 10:15 » 

Слав, по условию у нас солнечная батарея есть. В случае особо пасмурной погоды панель даст 10-20 Вт/м^2 в течении 8-10 часов. При ясной погоде батарея выдаст в 10 раз больше! Т.е. для роскошества в виде 10 мА при 5 В нам нужна панелька (24/8) * (5 * 0.01)/10 = 0.015 м^2 = 1.5 дм^2.
« Последнее редактирование: 24-11-2011 10:17 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #43 : 24-11-2011 10:37 » 

Даже древняя Mega16 без современных наворотов потребляет 12 мА в активном режиме. Это ток двух не слишком ярких светодиодов. Он попросту потеряется на фоне потребления наших индикаторов. Более современные микросхемы еще экономнее.

P.S. Впрочем, при желании добавить режим экономии вполне можно позже. Гораздо проще правильно работающее устройство сделать экономным, чем экономное заставить работать правильно. Исходя из этого и определяем приоритеты.
« Последнее редактирование: 24-11-2011 10:40 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #44 : 24-11-2011 15:51 » 

Цитата: Dale
Итак, в чистом итоге имеем:
автомат, поэтому потоки нужны;
автомат, поэтому потоки не нужны.
Не так. Автомат и потоки - вещи концептуально независимые. То, что существует некая библиотека, позволяющая мимикрировать автомату в потоки - это вообще к делу не относится. Это "синтаксический сахар".

Задачу можно решить, спроектировав автомат без потоков, но нельзя решить, спроектировав независимые потоки без синхронизации (т.е. общего, объемлющего их алгоритма или автомата). При использовании потоков в данном решении неизбежно возникают точки прерывания потоков, потому что есть зависимости от внешних сигналов. Но прерывания потоков на синхронизацию, вообще говоря, нивелируют саму идею параллелизма. Единственное, что в таких условиях даёт поток - возможность написания в рамках одной функции сценария прохождения состояний автомата с локальными переменными потока в качестве хранилища состояния автомата. Т.е. синтаксический сахар, слабо отличающийся от реализации простого автомата в одной функции с большим switch внутри. Это хорошо ровно до тех пор, пока сценарий тривиален (как в данном случае). Как только сценарий усложняется, или возникают различные сценарии, стартующие и завершающиеся в разных точках графа состояний, такая монолитная функция "алгоритма работы" превращается в трудно сопровождаемый ад, возникают потребности в декомпозиции. Прекрасно, когда такая декомпозиция возможна на "подавтоматы" - тогда тривиально выделить "подпотоки", но усложняется диспетчер потоков, поскольку жизненный цикл дочерних потоков ограничен тем или иным состоянием родительского, т.е. это не простая схема с фиксированным количеством "вечных" потоков. А если независимые "подавтоматы" не выделяются, то большой нечитабельный "спагетти" из многочисленных условий и циклов с copy-paste в разных местах одинаковых условных выражений, гарантирован.

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #45 : 24-11-2011 17:25 » 

Dimka, точнее так: protothreads позволяет:
1. Реализовать на Си линейную запись кода, который после препроцессора превращается в код автомата.
2. Благодаря п.1 прозрачно реализуется кооперативная многозадачность.

http://www.sics.se/~adam/dunkels05using.pdf
http://www.sics.se/~adam/dunkels06protothreads.pdf
Дим, ты изучал данный вопрос (protothreads)?
« Последнее редактирование: 24-11-2011 17:36 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #46 : 24-11-2011 17:38 » 

RXL, я против этого ничего не имею. Но, во-первых, считаю это второстепенным вопросом. Во-вторых, у этого подхода есть ограничения по сложности в части кооперативного взаимодействия. Поскольку в этой мигалке сложностей достаточного уровня нет, то "во-вторых" можно не учитывать.

На уровне "принципиальных схем" (хоть на том же UML) это будет выглядеть классическим автоматом - состояния и переходы (может диаграммы деятельности, правда, тут сложных алгоритмов нету). Остальное - особенности записи в той или иной среде разработки.
« Последнее редактирование: 24-11-2011 17:41 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #47 : 24-11-2011 17:47 » 

Взаимодействие потоков распространяется итеративно. Разве в реальной многозадачности это не так?

Кооперативность реализована на примитивах ожидания по условию, взаимодействия и прерывания потоков. Любой возврат из функции есть суть yield.

Недостаток в другом: блокировка возможна только в функции потока, но не в вызываемой ею функциях (если они тоже не реализованы как потоки). Это несколько осложняет применение.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #48 : 24-11-2011 18:27 » 

Предлагаю дискуссию прекратить.

Напоминаю!
Решения предлагаются без обсуждений.
Я думаю, что топик может быть активным еще до понедельника.
В понедельник его закрыть.

За неделю обработать (выделить) предложения, а уж потом ...
« Последнее редактирование: 24-11-2011 18:30 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #49 : 24-11-2011 20:42 » 

Предлагаю дискуссию прекратить.

Ну почему же... Дискуссия в целом неплоха, если отделить посты с нулевой информативностью по данной теме (вроде ходовой сигнализации буксиров) в кунсткамеру. Здесь все-таки не шоу "Самый умный" с Тиной Канделаки и бронзовых сусликов за многословие не раздают, так что лучше придерживаться темы.

Напоминаю!
Решения предлагаются без обсуждений.

Я бы поставил вопрос шире.

Во-первых, напоминаю, что центральная тема по-прежнему остается той, что задал Sla:

Прошу прощения, для тех кто не понял для чего это.

Цитата: Sla
Эта задача выросла из моего предложения
Цитата
Предлагаю сделать топик, где
Будет поставлена задача

Мигание светодиода, нажатие кнопок и прочее
Определены условия  - возможности железяки

Заслушать мнения и решения без обсуждений.
...
Это нужно для будущей статьи в продолжение Hello Word на микроконтроллерах
чтобы показать как писать софт, как писать тесты, как проводить отладку и прочее.

Поэтому в первую очередь приветствуются интересные задачи, которые могли бы стать темой для продолжения цикла. Я привел лишь один пример, первый попавшийся. Основные требования к задаче:

  • Устройство должно иметь хорошо различимые аудиовизуальные эффекты (световые индикаторы, зуммеры-пищалки и пр.), позволяющие легко убедиться в действительной параллельности нескольких задач бес специального оборудования (JTAG-отладчиков, осциллографов, логических анализаторов и т.д.). Короче говоря, чтобы по итогам можно было снять небольшой видеоролик, на котором видно, что девайс работает.
  • Аппаратура должна иметь разумную сложность. Сейчас у меня на плате прототипа установлен контроллер с 16К флеш-памяти программ, 1К ОЗУ и 512 байтами энергонезависимой памяти. Без проблем могу прицепить к нему несколько светодиодов разного цвета, кнопок, пьезопищалку. В принципе могу еще добавить текстовый ЖК дисплей (2 строки по 16 литер) и клавиатурную матрицу вроде телефонной (0-9, *, #). Переход на более мощный контроллер нежелателен, но в принципе возможен, если задача будет того стоить.
  • Программная реализация функций устройства также должна быть по возможности несложной. Основной фокус будущей статьи направлен не на реализацию сложных функций, а на организацию вычислительного процесса.

Поэтому в первую очередь в данной теме приветствуются предложения задач, удовлетворяющих вышеозначенным критериям. Не стесняйтесь предлагать варианты, вполне вероятно, что они окажутся интереснее моего. Возможные решения обсудим после выбора задачи.

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

Требования к соавторам: умение и, главное, желание конструктивно поработать. Писатели клуджей не приветствуются, флудогенераторы категорически не приветствуются. Остальные - добро пожаловать.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #50 : 24-11-2011 21:36 » 

Цитата: RXL
Взаимодействие потоков распространяется итеративно. Разве в реальной многозадачности это не так?
В том смысле, что они перебираются диспетчером в цикле - да. При этом передача передачи управления в общем случае выпадает из под контроля программиста, а значит могут наблюдаться "холостые" циклы некоторых потоков лишь оттого, что диспетчер абстрагирован от содержания потоков, они все для него "на одно лицо", и он не имеет программы (порядка), специфичной для решаемой задачи (и выбранной декомпозиции решения по потокам). Как только возникает соблазн специализировать диспетчер, всё начинает стремительно превращаться в иерархию автоматов, в которой кто-то зачем-то управляющую логику упрятал в неудобные в данном случае конструкции. Если же мириться с "холостыми" циклами, то чем больше потоков, нуждающихся в синхронизации, тем больше бесполезной деятельности - накладных расходов.

В реальной многозадачности так. Но чем "толще" логика синхронизации, тем слабее реальность многозадачности.

Цитата: Sla
Предлагаю дискуссию прекратить.
То у нас с Ромой не дискуссия, то "прояснение моментов". Рома хочет protothread для мигалок - без вопросов. Я лишь отмечаю граничные условия, если вместо мигалок представить что-то более сложное.

Цитата: Dale
Это нужно для будущей статьи в продолжение Hello Word на микроконтроллерах
чтобы показать как писать софт, как писать тесты, как проводить отладку и прочее.
Дело, конечно, благое, но, вообще говоря, ещё не было обсуждения Hello World в 7-и томах. Я пока ожидаю окончания публикации - неправильно обсуждать содержательную часть в закрытом для посетителей разделе. А так, вообще говоря, готовится отзыв в духе В.Г.Белинского "Взгляд на русскую литературу" Улыбаюсь
« Последнее редактирование: 24-11-2011 21:38 от Dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #51 : 24-11-2011 22:03 » 

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

Да уж, блестящая перспектива... Можно, пока не поздно, попросить взамен что-нибудь в духе Дейкстры или Кнута? Честное слово, я не заслужил столь изощренной пытки Белинским. Пусть уж он лучше порезвится в другой теме, благо места хватает.

Или все же "доктор сказал в морг, значит - в морг"... Тогда хотя бы попросите свой Талант все-таки помириться с сестрой и прийти в этот раз вместе с ней, иначе тема попросту обречена, а мне ее действительно жаль, потрудился над ней немало.
« Последнее редактирование: 24-11-2011 22:06 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #52 : 24-11-2011 22:06 » 

на вскидку

программный ШИМ
i2c
rs232/485
динамическая индикация
Цап/АЦП
Сухой контакт
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #53 : 24-11-2011 22:33 » 

на вскидку

программный ШИМ

Нужно придумать еще причину, по которой мы отказались от аппаратного. Например, нам нужно большое число каналов одновременно, и аппаратных не хватает. Скажем, 8-канальный регулятор яркости свечения светодиодов.

i2c

Нет под рукой подходящего железа, с которым общаться по I2C. Скорее можно что-нибудь с SPI замутить. Даже есть наметки, что именно, но не сразу.

rs232/485
Цап/АЦП

Этот вариант уже зарезервировал на будущее как пример синхронизированной задачи "производитель-потребитель": вольтметр делает замеры и отправляет на COM-порт PC, на котором терминальная программа отображает данные.

динамическая индикация

В принципе можно, но реальная ценность невелика при нынешней доступности ЖК дисплеев. Хорошо бы, чтобы проект имел потом логическое продолжение.

Сухой контакт

Не смог придумать никакой эффектный трюк с его использованием.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #54 : 25-11-2011 08:07 » 

Цитата: Dale
Да уж, блестящая перспектива... Можно, пока не поздно, попросить взамен что-нибудь в духе Дейкстры или Кнута? Честное слово, я не заслужил столь изощренной пытки Белинским. Пусть уж он лучше порезвится в другой теме, благо места хватает.

Или все же "доктор сказал в морг, значит - в морг"... Тогда хотя бы попросите свой Талант все-таки помириться с сестрой и прийти в этот раз вместе с ней, иначе тема попросту обречена, а мне ее действительно жаль, потрудился над ней немало.
Это звучит как призыв мне покинуть сию песочницу. В части этой темы - охотно. А в части отзывов на цикл статей - нет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #55 : 25-11-2011 08:23 » 

Это звучит как призыв мне покинуть сию песочницу. В части этой темы - охотно. А в части отзывов на цикл статей - нет.

Это звучит как призыв излагать конструктивно и по теме (хотя бы в порядке исключения). Перспектива заполучить очередной мегаопус в духе "мы преодолеваем эту трудность без синтеза распределенных прототипов" не внушает оптимизма, а упоминание Белинского еще больше настораживает, что в ход пойдет тяжелая артиллерия. Одно дело - балаган в теме про политику, другое - испортить впечатление от технической публикации.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #56 : 25-11-2011 15:31 » 

Dale, "Второй заход ковбоя в салун в незнакомом городе"  Улыбаюсь
Как варианты "подгрузки" процессора предлагается:
- Подзадача1: выдавать кроме SOS координаты точки, + значения температуры - ветра итд
- Подзадача2: Кроме передачи SOS морзянкой передавть следом пакет FSK модуляции для автомат. приема (догружать протоколом, дополнительным кодированием, проверкой связи итд).
Квитирование получения аварийного сигнала.
В лабораторном варианте сделать возможность визуализации по послед. порту.
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #57 : 25-11-2011 17:35 » 

- Подзадача1: выдавать кроме SOS координаты точки, + значения температуры - ветра итд

Суть темы в том, что стенд можно было реально собрать дома из подручных средств. Если кнопки со светодиодами подключить реально, то приобретать приемник GPS/GLONASS, анемометр и прочую экзотику ради статьи точно не буду.

- Подзадача2: Кроме передачи SOS морзянкой передавть следом пакет FSK модуляции для автомат. приема (догружать протоколом, дополнительным кодированием, проверкой связи итд).

В смысле тоже оптическим способом, тем же светодиодом?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
DneprSMV
Помогающий

kz
Offline Offline
Пол: Мужской

« Ответ #58 : 25-11-2011 19:31 » 

Dale,
(1) GPS не нужен, ведь координаты вроде константа. Задача их передать. По крайней мере на N-ой версии разработки может пригодиться. Отметка времени с таймера контроллера (например время сработки кнопки + текущее время).
(2) вполне тоже могобыть. Только вид модуляции другой. И приемник в случае чего несложный.
(использование одного ресурса-выхода двумя задачами)
Записан

"Не слушайте никаких советов, в том числе и этот" (Сократ ?)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #59 : 25-11-2011 19:43 » 

Вся ситуЁвина в том, что, к сожалению, пока не нашлось подходящего примера, вот и притянуто кое-что за уши.
Как говорил один из экс президентов - маємо, те що маємо.

Вот пытаюсь, вспомнить свои  наработки.... Вся сложность сводилась только к программному автомату - правильно описать состояния и переходы.
Какая-либо мат обработка сигналов? - опять же,  можно рассмотреть отложенное состояние.
Считаю, что для задачи более сложной, чем Hello, word, эта вполне подойдет.

С другой стороны... ммм... дождуссь коментов по поводу статьи. Ибо нефик тут словами разбрасываться. Итак всего букв 33.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
v2
Помогающий

ua
Offline Offline

« Ответ #60 : 25-11-2011 21:14 » 

Вариант добавки:

Подзадача 1: (минимум)
 Необходимый базовый функционал, озвученный в начале темы.

( Представим, что наш маяк имеет канал связи (Uart + простенький протокол))

Подзадача 2: (расширения - коммуникация)
 Сбор и передача телеметрии  (ветер, температура, давление,  влажность,  освещенность, _SOS_ ) ,
  минимум - индикация состояния рабочих входов/выходов и временная метка;

Подзадача 3: (расширения - пользовательский интерфейс)
 Реализовать меню (а-ля ЖК(2х16)+4кнопки через тот же  Uart  ) посредством которого диспетчер будет иметь возможность
 просмотреть/изменить  параметры работы маяка и, при необходимости, просигнализировать (LED) потерпевшим
 о принятии сигнала бедствия.

 =>  Использование одного "долгоиграющего" аппаратного ресурса несколькими подзадачами
 =>  Ожидание и обработка ввода пользователя

Подзадача 4: (гипотетическая)
 Тяжелый фоновый  процесс - например, расчет  волнения, используя бортовой акселерометр.
 (Не знаю как, но по выч. ресурсам должен быть затратным )

  ( Если тестировать, то и "эффективность труда" микроконтроллера )
 => Значение инкремента в фоне на единицу времени  даст возможность оценить   варианты   реализации
      по производительности и  расширяемости.

ЗЫ.
Возьмусь вышесказанное  воплотить в код, используя независимые (uOS) потоки (потому как UI на "автоматах" – сложная штука).






Записан
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #61 : 25-11-2011 21:19 » 

Считаю, что для задачи более сложной, чем Hello, word, эта вполне подойдет.

"Эта" - в смысле которая с двумя мигалками и морзянкой, сформулированная в начале темы?

С другой стороны... ммм... дождуссь коментов по поводу статьи.

Это... гммм... тех самых, обещанных (не к ночи будь упомянуты)? Коллега, будем оптимистами, может, еще все обойдется. Новолуние было только вчера, следующее только через месяц, к тому времени статья может и подзабыться, если оставшиеся две части будут быстро опубликованы (есть реальный стимул поторопиться). Опять же, тема про Белоруссию - отличный громоотвод, принимает на себя основной удар, на нее все надежды. Может, еще кто из братских республик выручит? Я отблагодарю при первой возможности, честное слово. Посвящу вам следующую статью.

Ибо нефик тут словами разбрасываться. Итак всего букв 33.

Эх, ваши бы слова - да Богу в уши... Зато сколько потенциальных комбинаций! Однобуквенных фраз только 34 (с пробелом), двухбуквенных - 342, ... n-буквенных - 34n. А если учесть, что n при разбрасывании редко бывает меньше 10.000, прогноз вовсе не радует. Боюсь, во Вселенной столько атомов нет. Пропал калабуховский дом...

Добавлено через 10 минут и 40 секунд:
Вариант добавки:

Подзадача 1: (минимум)
 Необходимый базовый функционал, озвученный в начале темы.

( Представим, что наш маяк имеет канал связи (Uart + простенький протокол))

На моем прототипе есть преобразователь TTL <-> RS232, так что этот вариант легко реализуем без накладных расходов. Можем и обратный канал сделать.

Подзадача 3: (расширения - пользовательский интерфейс)
 Реализовать меню (а-ля ЖК(2х16)+4кнопки через тот же  Uart  )

Вполне сможем обойтись без UART, непосредственным подключением. Свободных бит в портах вполне хватит. Пусть UART занимается обменом с хостом, имитирует внешний канал связи.

Возьмусь вышесказанное  воплотить в код, используя независимые (uOS) потоки (потому как UI на "автоматах" – сложная штука).

Замечательно. Тогда я начну со standalone версии, а потом как развитие прикрутим к ней ОС.
« Последнее редактирование: 25-11-2011 21:29 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #62 : 25-11-2011 22:13 » 

Собственно, выпустить все части скопом не проблема.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #63 : 25-11-2011 22:35 » 

Собственно, выпустить все части скопом не проблема.

Лучше все-таки приурочить к нашим периодическим рассылкам. Если бы лично на меня вывалили разом столько информации, я бы отложил чтение на потом и затем благополучно забыл (так у меня обычно и бывает со слишком частыми и объемными рассылками).

А я пока потихоньку начну новую тему, благо v2 выразил желание помочь реальным делом. Эта тенденция весьма радует.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #64 : 26-11-2011 08:02 » 

Тогда предлагаю слегка форсировать до двух выпусков в неделю. Пятую часть я опубликовал в среду. Рассылка выйдет сегодня.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #65 : 26-11-2011 09:19 » 

Цитата
потому как UI на "автоматах" – сложная штука
Т.к. не увидел смайлов, то посчитал это серьезным заявлением.
Описать состояния интерфейса, жестко прописать в таблицу.
Переходы на п/п по адресу в таблице.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #66 : 26-11-2011 13:15 » 

Цитата
потому как UI на "автоматах" – сложная штука
Т.к. не увидел смайлов, то посчитал это серьезным заявлением.

Сложность - категория весьма относительная и субъективная:

Цитата
На наше формирование большое влияние оказывают инструменты, которые мы используем, в частности: формализмы, которые мы используем, формируют наш образ мышления лучшим или худшим образом, и это значит, что мы должны быть чрезвычайно осторожны в выборе того, чему учить и чему учиться, потому что разучиться потом совершенно невозможно.
(Дейкстра, "Ответы на вопросы студентов отделения программного обеспечения EWD1305"). Впрочем, хватит философствовать, пока не накликали беду.

В UML есть подходящая нотация для представления различных автоматов, так что проектирование не должно представлять проблему. Ну а реализовать проект и вовсе несложно.

Описать состояния интерфейса, жестко прописать в таблицу.
Переходы на п/п по адресу в таблице.

Вот пример универсального подхода, который позволит реализовать автомат практически любой сложности. В простых случаях таблица будет разреженной, и мы можем обойтись простыми условными переходами.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
v2
Помогающий

ua
Offline Offline

« Ответ #67 : 26-11-2011 14:51 » 

(потому как UI на "автоматах" – сложная штука).
Для меня и, скорее, психологически.




Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #68 : 02-12-2011 04:13 » 

Предыдущая статья полностью опубликована.
http://club.shelek.ru/viewart.php?id=354
http://club.shelek.ru/viewart.php?id=355
http://club.shelek.ru/viewart.php?id=356
http://club.shelek.ru/viewart.php?id=357
http://club.shelek.ru/viewart.php?id=358
http://club.shelek.ru/viewart.php?id=359
http://club.shelek.ru/viewart.php?id=360
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #69 : 08-12-2011 22:45 » 

Ну вот, после отзыва можно вернуться к теме.

Есть следующее предложение по содержанию задачи: световой телеграф.

Это устройство, которое соединено с компьютером по COM или USB, получает от компьютера текстовые сообщения в свой буфер и "намигивает" их лампочкой.

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

Со стороны host-машины для общения с устройством нужно иметь 3 протокола (или 3 направления взаимодействия):
1) Разные настройки - например, скорость вывода.
2) Загрузка текста в буфер устройства.
3) Чтение состояния и управление (остановка, запуск, сброс и т.п.)
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
zubr
Команда клуба

by
Offline Offline
Пол: Мужской

« Ответ #70 : 09-12-2011 11:44 » 

Лет 10 назад я что то подобное делал, правда там было наоборот: к LPT-порту был подключен ключ отстука, а в окне программы отображался текст, отстученный на ключе морзянкой.
Записан
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #71 : 29-05-2014 06:18 » 

Цитата
Ну, граждане алкоголики, хулиганы, тунеядцы – кто хочет поработать?

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

Итак, вкратце.

Основная задача: повысить качество разработки встроенных систем с микропроцессорами с одновременным уменьшением временных затрат за счет более тщательного тестирования как отдельных блоков, так и системы в целом. Акцент делается не на soft и не на hard (в обеих областях есть инструменты для этого), а именно на firmware.

Ожидаемые результаты работы:
1) сквозная методика разработки, от сбора требований до опытного образца;
2) аппаратная часть (стенд для подачи стимулов на разрабатываемую систему и оценки ее реакции на эти стимулы);
3) программная часть.

Идеология: попытаться экстраполировать "гибкие" методики проектирования ПО (TDD, BDD) на процесс проектирования программно-аппаратного комплекса в целом.

Предполагаемый инструментарий для решения: C (для стенда), Ruby + Cucumber (для хоста, управляющего тестированием), Gherkin (как язык описания функциональных требований к системе).

Есть реально заинтересованные в результате (или хотя бы в процессе его получения)?

P.S. Не могу сказать, что идея нова: несколько лет назад команда из Atomic Object публиковала статьи и доклады о чем-то наподобие. Однако в качестве стенда использовалось оборудование с довольно ограниченными возможностями, без перспектив расширения. Софт так и не был доведен до состояния "бери и пользуйся", требовал плясок с бубном и не обновлялся уже несколько лет.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #72 : 29-05-2014 11:43 » 

Я пасс. Времени мало.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
LemmonRus
Помогающий

ru
Offline Offline
В правильно заданном вопросе 90% ответа.


« Ответ #73 : 30-05-2014 11:12 » 

Народ поясните мне,а зачем в исходной работе микроконтроллер?
Это можно сделать на аналоговых схемах.
Записан
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #74 : 30-05-2014 12:10 » 

Исходную работу можно и вовсе не делать, поскольку результат никому даром не нужен. Нужен был примитивный пример многопоточного приложения для статьи. Настолько примитивный, чтобы не заморачиваться над самой задачей, а сосредоточиться только на реализации потоков. Проще нескольких независимых мигалок в одном корпусе оказалось трудно что-то придумать.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #75 : 30-05-2014 12:16 » 

кстати... недавно один человек тут на форуме искал команду единомышленников, для построения ЧПУ станка. от проектирования плат-плис-контроллеров до драйверов. как раз в учебно-практическом смысле... правда я ему ответил, что сомнительно, что кто то присоединится, в виду отсутствия времени и интереса по данной тематике у основной части участников. но если кому то идея интересна - могу ему отписать?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #76 : 30-05-2014 12:21 » 

Конечно, почему бы нет. Правда, тема самодельных ЧПУ давно избита и заезжена, поэтому имеет смысл браться только при наличии свежих идей. Ибо на конструкции, которые массово тиражируют, без слез не взглянуть. Спроектировано по принципу "зато работает".
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #77 : 07-04-2015 08:58 » 

Можно тоже подкинуть тему, чтобы было и полезно и занимательно.

Много народа использует МК для устройств различной сложности, и значительное место занимает вопрос вывода информации, в том числе и во время тестирования, когда имеется необходимость выводить не только нужные параметры, но и служебные. Обычно, по мере роста сложности, для простых устройств используются сегментные индикаторы, шкалы, далее идут готовые малоформатные текстовые и графические модули. Но, что делать, когда нужно следить за кучей параметров, использовать, некоторую графику? Самое распространённое решение - сделать интерфейс с компьютером и выводить информацию через него на монитор, но можно ли поступить иначе - формировать изображение на мониторе, минуя стадию обработки на ПК?
Надо сказать, что даже информации по электрике VGA в сети не так уж и много, но на сегоднешний день этот стандарт уже устарел, да и разрешения, вроде, 640х480 на современных мониторах выглядят некачественно.
Задача: сделать модуль для организации вывода текстовой или графической информации на экран обычного монитора (например, через DVI). Речь, естественно, не идёт об интерактивном выводе видео - просто терминал. Мне это видится, как два буфера - один заполняем, другой рисуется, по заполнению нужными данными производим переключение. Управление модулем и передача данных должны происходить простейшим способом: SPI, I2C, RS-232... Время заполнения пассивного буфера не критично, так как до переключения будет повторно рисоваться активный буфер во избежания мерцания или появления каких-либо дефектов изображения.

Возможно, существуют готовые решения? Но, в любом варианте сама тема актуальна и интересна.
Записан
Ochkarik
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #78 : 07-04-2015 09:48 » 

http://rspmarket.com/shop/
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #79 : 07-04-2015 10:49 » 

Одноплатные компьютеры - это, конечно, хорошо, но:
как раз в учебно-практическом смысле...
Задача даст возможности оценить и ПЛИС и МК, работу с разными типами памяти... хотя, конечно, объёмно и не так просто, но не писать же статью на тривиальную тематику? Как идея для статьи, достойной профессионала, думаю, неплохо.
Записан
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #80 : 07-04-2015 21:49 » 

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

Во-первых, для тестирования он окажется бесполезен чуть более чем полностью. Хороший тест должен быть полностью автоматическим, будь то модульный, интеграционный, функциональный или еще какой (исключение можно сделать разве что для приемочного, но это совсем отдельная история). Если тест выводит что-то на экран, обязательно подразумевается некто, кто будет это с экрана считывать, и этот некто - человек со всеми его недостатками. Человек считывает данные медленно (по компьютерным меркам). Если данных будет много, человек будет еще и ошибаться. Ну а если тесты медленные, то мы вынуждены сказать "прощай" разработке через тестирование, регрессионному тестированию, рефакторингу, "гибким" методикам проектирования в целом и еще множеству весьма полезных в хозяйстве разработчика вещей. Даже если бы у меня такой девайс уже был прямо сейчас забесплатно, я все равно не задействовал бы его для тестов - не нужен он там совершенно, даже отчасти вреден.

Во-вторых, рассмотрим его как устройство для вывода. Дисплею нужен буфер для хранения битовой карты экрана. Разместить его во встроенной оперативной памяти контроллера нереально - даже для VGA 640х480 требуется треть миллиона пикселов. Если выделить всего по байту на пиксел, получается запредельный для типичного микроконтроллера объем. Если вынести битовую карту в отдельную память и заполнять ее по серийному интерфейсу - грубо оценим необходимое для формирования кадра время. SPI с натугой пропустит несколько мегабит в секунду (вопрос, сколько времени уйдет на генерацию этих данных на большинстве микроконтроллеров, пока отложим). I2C с порогом  400 кбит/с и RS232 с еще более скромными показателями годятся еще меньше.

Можно снизить трафик между МК и дисплеем, если оснастить последний подобием акселератора. Тогда можно манипулировать не отдельными точками, а примитивами (например, передавать координаты концов отрезка или вершин прямоугольника). Правда, возрастет сложность разработки, а вот ее полезность - вряд ли.

Я бы для данной задачи рассмотрел два варианта. Первый тривиален: использовать отвергнутый ранее одноплатный компьютер, в котором все необходимое, включая графические библиотеки, уже есть. Но тут все совсем просто и нет полета фантазии.

Второй вариант тоже не блещет оригинальностью: используем популярное в "большом" программировании отделение данных от представления (MVC/MVP и иже с ними). Оснащаем контроллер сетевым интерфейсом (с проводами либо без, не суть важно) и встроенным web-сервером (благо этого добра в Сети навалом в готовом виде). Любой желающий отобразить эти данные подключается как браузер, причем годится что угодно вплоть до смартфона.

Мое IMHO: если главная цель - размяться и поднатореть в применении ПЛИС, то почему бы и нет? Задача в самый раз - и не слишком тривиальная, и в то же время не неподъемная. Если же вторая цель - еще и получить полезный в хозяйстве девайс, тут меня гложут большие сомнения: тот же результат достигается куда проще и практичнее, плюс еще и масштабируется не в пример лучше.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #81 : 08-04-2015 15:34 » 

Основная цель, естественно, образовательная, как говорите - поднатореть, думаю, многие, начиная от радиолюбителей и заканчивая "домашними" ЧПУ-строителями, заинтересуются данным устройством или, по крайней мере, получат серьёзный стимул к развитию в области практической электроники. С коммерческой стороны - да, одноплатные компьютеры - решение эффективное, масштабируемое...

С точки зрения реализации, не нужно умножать цель, например, сетевой интерфейс - сам по себе не так прост, и является темой для отдельной статьи. Главное просто и доступно. Не зря изначально я сказал, что о воспроизведении видео не может быть и речи, естественно, ни у одного МК не хватит собственной памяти, а у средних, например, PIC - скорости. Стало быть, передача, исключительно, массива точек из устройства пользователя (на базе МК, МП - да чего угодно) в девайс лишена смысла. Мне видится интерфейс методом последовательной передачи команд (пакетов, содержащих команды, данные, код контроля целостности), то есть модуль должен поддерживать команды:
а) собственной инициализации (вкл/выкл, установка разрешения монитора...),
б) закрашивания пассивного буфера в заданный цвет (или прямоугольной области),
в) установки пикселя в пассивном буфере по координатам и цвету,
г) записи таблицы растрового шрифта в ПЗУ,
д) установки буквы по координате, цвету и адресу в ПЗУ...
...
е) обмена активного и пассивного буферов местами.
Активный буфер - тот, который выводится на экран, пассивный - тот, в котором мы рисуем, подготавливая изображение.
Записан
Dale
Блюзмен
Модератор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #82 : 08-04-2015 23:08 » 

С коммерческой стороны - да, одноплатные компьютеры - решение эффективное, масштабируемое...

Сегодня это вполне реально не только для коммерческого применения. Возьмите, к примеру, Raspberry Pi. За несчастных 36$ вместе с доставкой получаете готовый компьютер размером с кредитку под Linux'ом с частотой 700 Мгц, ОЗУ в полгигабайта, сетевой интерфейс 10/100 Mбит/c, 4 порта USB, довольно приличный для таких размера и цены видеоакселератор, звук средней паршивости и интерфейс расширения, к которому можно нацеплять чего угодно. По сегодняшнему курсу это немного меньше 2.000 руб, не жалко пожертвовать в качестве контроллера для нетривиальной задачи. Сумеете уложить свой мегадевайс вместе с разработкой железа/софта и изготовлением в эту сумму?

С точки зрения реализации, не нужно умножать цель, например, сетевой интерфейс - сам по себе не так прост, и является темой для отдельной статьи. Главное просто и доступно.

IMHO преувеличение, и сильное. Модуль на 28J60 стоит меньше трех баксов с доставкой и устроен проще пареной репы, если захочется развести на плате собственный вариант, а не лепить покупной. От софта к нему буквально ломится интернет, начиная со стека сетевых протоколов и до готового встроенного web-сервера. Писать о нем статью - пустая трата времени, такую статью только ленивый до сих пор не написал: http://yandex.ru/yandsearch?text=28j60%20%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&lr=39

Разумеется, это при условии, что не польстились на Raspberry.

Основная цель, естественно, образовательная, как говорите - поднатореть, думаю, многие, начиная от радиолюбителей и заканчивая "домашними" ЧПУ-строителями, заинтересуются данным устройством или, по крайней мере, получат серьёзный стимул к развитию в области практической электроники.

Ну вот я, к примеру, тот самый многий радиолюбитель и домашний строитель ЧПУ. Устройством не заинтересовался по описанным выше причинам (соотношение затраченных на девайс усилий и полученной от него радости складывается не в его пользу). Стимул к развитию тоже вряд ли получу. Остается исключительно образовательный аспект - сделать, похвалить себя за усидчивость и сложить на полку.

Я бы поискал более достойную задачу для освоения современных ПЛИС. Хотя мне самому такая задача навскидку не приходит в голову.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #83 : 09-04-2015 15:08 » 

За несчастных 36$ вместе с доставкой... По сегодняшнему курсу это немного меньше 2.000 руб, не жалко пожертвовать в качестве контроллера для нетривиальной задачи. Сумеете уложить свой мегадевайс вместе с разработкой железа/софта и изготовлением в эту сумму?
Хорошо, убедили.
Записан
Страниц: 1 2 3 [Все]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines