Pingvin писал(а):
Цитата:
Так мой код и использует аппаратный захват через HAL (Input Capture mode и "захват ШИМ" - это одно и то же).
Добавьте определение таймаута на третьем канале и не надо будет из основного цикла следить за переполнением.
Мое решение обосновано несколькими причинами:
- Как только придут данные по ИК, их нужно скопировать в отдельный буфер, поскольку время обработки может быть существенным (оно включает, как минимум, передачу по UART, возможно медленному). Поскольку правильно писать в прерываниях минимум кода, то операцию копирования лучше вынести оттуда. Всё равно использование буфера будет из главного потока. А если выносить копирование, то логично вынести и проверку таймаута, которая разрешает копирование. Иначе придется вводить дополнительный флаг и чего-то усложнять.
Думаю, не нужно объяснять, почему делать тяжелые прерывания - это плохой стиль программирования. Конечно, это не критично в данной задаче, но это не повод писать абы что и абы как, лишь бы работало.
- Для демодулирования ИК я использую TIM14, у него только один канал. Поскольку на 100% ещё не ясно, что будет в устройстве, я решил сэкономить многоканальные таймеры.
- "Пионеру", не знакомому с нюансами работы STM32, будет проще понять мой код.
- Мой код ИК-демодуляции не менее функционален, и при этом уже полностью готов для реального использования.
А вообще, это осуждение бессмысленно. Прием ИК - элемнтарная задача. Любой вариант можно написать и отладить полностью за 3 часа с нуля, ну серьезно.
Pingvin писал(а):
Цитата:
Да, разумеется. Как что-нибудь заработает, сразу напишу подробное описание.
Ну я надеялся поучаствовать хоть в каком то открытом обсуждении протокола.
Я просто хочу предложить отправную точку, от которой можно начать. Чтобы было что расширять и редактировать. Обычно протоколы коллективно придумывают именно так: кто-то готовит драфт, его улучшают. Конечно всё открыто обсудим!
А в целом - мы вроде и занимаемся уже обсуждением (про диоды)
Pingvin писал(а):
Цитата:
Не один диод - в каком смысле? Чтобы два диода в одном датчике горели разными цветами? Это зачем?
Ну для более наглядного визуального различия разных игровых событий, к примеру.
А что - для точки захвата ещё один протокол писать что ли?
Или электронной мишени?
Я может сделаю "прогресс-бары" захвата на светодиодных лентах ws2812
Протокол должен быть расширяемым. Если вам кажется, что он как-то применим в мишени или контрольной точке - ради бога, приделаете соответствующие расширения. Когда это понадобится.
Я не понимаю, куда вы собираетесь ставить прогресс-бары. В датчики? И при чем здесь точка захвата? Очевидно, точка должна иметь свои мозги, радио, звук и нетривиальную логику.
Как ей поможет данный протокол?
Опишите модель использования протокола подключения смарт-сенсора в описанных вами случаях, будет понятней.
Один универсальный протокол (RCSP) у меня уже есть, и он действительно хорошо подходит для всех задач коммуникации игровых устройств. Делать второй такой же не надо по очевидным причинам. Использовать его в смарт-сенсоре не надо, тоже по очевидным причинам.
Pingvin писал(а):
Шире надо мыслить, тут прав LTagKirov - не надо циклится только на датчике.
Есть хорошее английское слово overdesign. Это то, чего нам не надо
Не предлагаю я вводить какие-то ограничения функциональности заранее. Но проблемы нужно решать нужно по мере их поступления. Невозможно без итераций сразу разработать устройство, которое делает всё на свете. Нужно действовать поэтапно. Это же базовые принципы разработки чего угодно.
Есть тонкая грань между "шире мыслить" и "фантазировать".