USB -композитная библиотека вопрос

Арпрос
Вторник 14 августа 2018 г. 20:02
У меня есть вопрос для пользователей моей USB -композитной библиотеки. Фон к вопросу: в настоящее время библиотека работает как многие библиотеки Arduino, а именно она объявляет ряд удобных объектов, таких как Joystick, Usbhid, и вы можете просто использовать объект напрямую напрямую. Тем не менее, побочным эффектом этого является то, что куча кода, который вам не нужен, связан в. Эн.глин., Даже если вы не используете последовательный порт, композитоэральный объект связывается в. Теоретически, умный компилятор мог бы выяснить, как оставить объекты, но версия GCC ARM не достаточно умна (я даже попробовал последние GCC 7).

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

USBHIDDEVICE USBHID;
Клавиатура Hidkeyboard (USBHID);
Hidjoystick Joystick (USBHID);
UsbCompositeserial Composetseterial;

Это делает библиотеку немного более громоздкой в ​​использовании, но сохранит как Flash, так и RAM. Это может сэкономить почти 1 КБ ОЗУ в некоторых конфигурациях (e.глин., Если вы не используете Compositeserial).

Должен ли я внести изменения? Я хотел бы обратную связь.

Стивестронг
Ср 15 августа 2018 г., 5:22
Я голосую за да.

AG123
Ср 15 августа 2018 г., 6:10
Спасибо, я еще не использовал библиотеку буквально, но да, разделение их было бы хорошо.
Я пытаюсь встать на подножку HID, но я нашел комплекс протокола, чтобы понять. В отличие от некоторых из более простых протоколов USB, спрятавшихся очень структурированных наборов команд. Часто содержит последовательность многих команд (дескрипторы отчета HID https: // eleccelerator.com/turning-abou ... Скрипторы/) для отправки отдельных нажатий клавиш или движений мыши. Основные характеристики класса USB HID, доступные на http: // www.USB.org/разработчики/Hidpage/ Не слишком ясно о том, как следует создавать последовательность команд дескрипторов отчета HID и для индивидуальных вариантов использования.

Тем не менее, я столкнулся с этой статьей о превращении Pro-Micro в USB-клавиатуру
https: // www.Sparkfun.com/Учебные пособия/337
Я бы подумал, что мы можем реализовать аналогичный API, так что код, подобный Keyboard.write('z'); // send a 'z' to the computer via Keyboard HID

Rogerclark
Ср 15 августа 2018 12:18
Я согласен

Дон’T создайте экземпляр библиотеки изнутри библиотеки.

Эдогальдо
Ср 15 августа 2018 г., 18:27
+1 за то, чтобы позволить клиентам объявить необходимые им объекты.

Ура, e.

Мадиас
Ср 15 августа 2018 г. 20:57
Также +1 и снова большое спасибо за этот ценный вклад (эта библиотека)

Арпрос
Чт 16 августа 2018 3:00 утра
[AG123 - Ср 15 августа 2018 г. 6:10] - Я бы подумал, что мы можем реализовать аналогичный API, так что код, подобный Keyboard.write('z'); // send a 'z' to the computer via Keyboard HID

Арпрос
Чт 16 августа 2018 г. 14:45
Сделано на 0.90. Это потребует незначительных переписываний ко всем коду, который использует библиотеку. Я пересмотрел все примеры, чтобы дать руководство и добавил краткий файл руководства по обновлению.

Шлюха
Ср 22 августа 2018 г., 13:52
Хотя у меня нет абсолютно никакого опыта использования вашей библиотеки, я бы согласился не создавать экземпляр объекта в библиотеке, который определяет его.

У меня было много ... обсуждения ... С программистом OO, который хочет создать системы, где каждый объект и Meathod создаются в Seancon. Это ужасная трата времени и ресурсов процессора. Мысль должна быть предоставлена ​​тому, что должно быть включено в библиотеку, и что можно оставить.

Шлюха

Mrburnette
Ср 22 августа 2018 г., 16:54
[Шлюха - Ср 22 августа 2018 г. 13:52] - <•••>
У меня было много ... обсуждения ... С программистом OO, который хочет создать системы, где каждый объект и Meathod создаются в Seancon. Это ужасная трата времени и ресурсов процессора. Мысль должна быть предоставлена ​​тому, что должно быть включено в библиотеку, и что можно оставить.
<•••>
Существует разъединение между программистами ООП/миникомпьютера ООП и программистами встроенных систем. С гигабайтами 64-битной оперативной памяти и ОС с достойным менеджером виртуальной машины, нет никаких оснований не создавать объекты перед использованием; Он также устанавливает съемку памяти приложения, чтобы ОС могла эффективно управлять приложением.

Библиотеки в Arduino в значительной степени учетная запись для популярности Arduino-Ecosystem. Честно говоря, многие слабые программисты просто не могли взаимодействовать со сложными датчиками без библиотек. Библиотеки и H/W примеры используют начинающего программиста "быстро запускаются". Adafruit и Sparkfun также понимают, что библиотеки датчиков продают завышенное оборудование; Часть завышенных цен на онлайн-форумы и поддержка в чате.

Многие библиотеки были бы лучше написаны как функции прямого использования. Часто необходимость в ООП - это просто инкапсулировать библиотеку ... что -то лучшее в некоторых случаях с пространством имен.

Луча

AG123
Ср 22 августа 2018 г. 18:01
+1 Для Рэя, голый металл *отличается *, раньше он был просто регистрем, адресами и простой ассамблеей, в наши дни c++ & Библиотеки, казалось, делали «высокий уровень» с голой металлом, и вскоре можно узнать правду о том, что Blue Pill / Maple Mini имеет 20K SRAM, это все, и все необходимо жить в мире 20 тыс

Мне любопытно подозреваю, может ли один день STM после того, как все выпустите «монстра» (с точки зрения физического отпечатка ноги) STM32 с >1 МБ SRAM, разрыв между процессорами MCU и «приложением» приближается с течением времени с течением времени

Глубокий ниже голого металла, я обнаружил «забытый» * естественный * мир, состоящий из аналоговых напряжений, токов, емкостей, сопротивлений и операций по операциям, в наши дни аналоговые & Цифровой двигатель все ближе и Arduino, MCUS довольно символизирует его
:ржу не могу:

Mrburnette
Чт 23 августа 2018 г. 12:29
[AG123 - Ср 22 августа 2018 г. 18:01] - <•••>
Глубокий ниже голого металла, я обнаружил «забытый» * естественный * мир, состоящий из аналоговых напряжений, токов, емкостей, сопротивлений и операций по операциям, в наши дни аналоговые & Цифровой двигатель все ближе и Arduino, MCUS довольно символизирует его
Ощущение силы Verilog с серией PSOC Cypress PSOC. После того, как разочарование уступит пониманию внутренней аналоговой/цифровой сети ткани для внутренней блокировки, открывается целый мир возможностей. Мое короткое время, проведенное с PSOC, было более чем интересно.

Теперь новое веселье:
FPGA Arduino


Луча

Янус
Вторник 28 августа 2018 г., 4:16
Выступая как человек, который потратил годы, помогая другим найти глюки в своем коде, оборудовании и время от времени их основной подход к проблеме.
Вы всегда хотите сделать библиотеку максимально конкретной.
Сделано правильно, обрезка библиотеки экономит время, хлопот и память.
Это встроенный процессор, он никогда не будет быстрым, но он может быть достаточно быстрым.

Когда я смотрю на библиотеку для встроенных систем, я склонен сравнить ее с драйверами устройств DOS.
Мне нужно иметь возможность инициализировать/распределять, настраивать, получить/установить состояние, отправлять и получать.
В то время как полный взорванный компьютер может позволить себе больше, чем встроенная система не может.
Программа для случаев, о которых вы беспокоитесь, а остальное уделено, что.
Сделайте это намеренно, так что это никогда не случается случайно.
Если это произойдет случайно, у вас нет места, чтобы начать искать неприятности, кроме объема трассировки.
Если вы утилизируете сознательно, вам нужно только проверить диспетчер.
Это также создает крючки, которые полезны для расширения функций позже.
Добавление if/then/else или выберите/Case операторы быстро и простые, если он будет чистой структурировать вашу программу.

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

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

Я с нетерпением жду встречи.


Янус.

Mrburnette
Вторник 28 августа 2018 г. 13:00
Чтобы взять пост Януса дальше на темную сторону...

Я считаю, что библиотеки Arduino для быстрого & Грязный, встать и быстро бежать толпу. Если никто действительно не анализирует библиотеку, никогда нельзя быть полностью уверенным, как/почему она работает, как это. Помимо основных библиотек, я обычно люблю инкапсулировать библиотеку .рука .CPP файлы прямо в эскиз. Это делает две вещи:
- Это позволяет вам обрезать и настраивать библиотеку в соответствии с вашими потребностями
- Он инкапсулирует библиотеку из будущих опубликованных обновлений

Arduino IDE Tab-Metaphor упрощает включение библиотек. А .H файл находится на одной вкладке, .Файл CPP находится в другой вкладке. Да, безумие Ардуино о том, как составлен код, и ссылка может привести к неудаче, но обычно некоторое редактирование в .H файл решит задачи с вариацией... Самая большая проблема - автоматическое прототипирование функций, которое, на мой взгляд, является наихудшей реализованной функцией Arduino... проклятие. Повторное использование кода отлично, если это ваш собственный код. Библиотеки великолепны, если вы копаете их, чтобы увидеть, как они работают. Иногда вам нужна только небольшая часть кода библиотеки, и хотя интеллектуальный компилятор GCC достаточно хорош в том, чтобы выбрасывать неиспользуемые модули, он не всегда принимает правильные решения.

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

Я помню, когда я был ребенком, и моя мама ругала меня за то, что я ел еду по одному предмету за раз за раз... Она бы сказала: «Не просто ешьте одну вещь за раз - все это идет в одно и то же место."Библиотеки такие, как только модули будут скомпилированы, они все любят в двоичном.

Познакомьтесь с вашими библиотеками, особенно те, которые часто используются. Втяните библиотеки в свой справочник исходного эскиза и отредактируйте их по мере необходимости: вырезать беспорядок, изменить размеры буферов, создать новые методы для классов. Если 80% вашего кода - некоторые библиотеки другого автора, это ваша 20% действительно основная программа?

Луча

Мадиас
Вторник 28 августа 2018 13:13
Инкапсулируйте библиотеки, это была одна вещь, которую я действительно любил на Uecide, пока я работал с Pic32 _> https: // uecide.орг/
Если вы вставите какую -нибудь библиотеку, Uecide сделает автоматическую копию в вашу папку. С левой стороны вы можете даже выбрать *.рука *.Файл CPP для редактирования.
К сожалению, было невозможно работать с ядром STM32Duino на этой IDE.

Янус
Вторник 28 августа 2018 г. 15:40
Это не намерение поставить себя на ситхдекс, но, эй, все, что работает.


Джедаи во мне рады видеть Arduino IDE и System Support.
Это позволяет легко попасть в встроенные вещи и получить некоторые результаты, которые вы можете увидеть.
Сообщество поддерживает, аппаратное обеспечение достаточно доступно для того, чтобы почти кто -либо мог экспериментировать с свободным.
Это яркое и обнадеживающее.
Быстрый и грязный, по крайней мере, предоставляет отправную точку {доступную}, которая больше, чем большинство так называемых профессиональных программных/оборудования обычно.


Ситх во мне, смеется.
Хотя у Arduino IDE есть сильные стороны своих добродетелей, у него также есть свои слабости.
Усовершенствованное обучение требует сравнения и контраста, что требует изоляции.
Поскольку Arduino IDE использует ваш профиль пользователя, это делает его невозможным.
Вот почему я перекомпилировал его после изменения своей копии, чтобы иметь возможность сохранить все в портативном каталоге, если присутствует.
Моя личная вилка больше не делает запись в моем профиле пользователя, если я сначала сделаю портативный каталог.
Изменение было на удивление маленьким.

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

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


Бену во мне, однако, имеет другой взгляд.
Arduino IDE не предназначен для профессионального использования.
Он предназначен как введение, а не коммерческий продукт.
Постоянно начинать все сначала не только ожидается, но и планируется.
Вы должны начинать с нуля снова и снова, когда учитесь.
Лучший способ для тех, кто имеет знания, - это передать эти знания, помочь другим учиться.
Это позволяет вам видеть свои знания другими глазами.
Вот почему вы учитесь столько же, хотя и очень разные уроки, от преподавания, как учились.


Янус.

Мадиас
Вторник 28 августа 2018 г., 16:00
Портативная версия не была официально сделана?
https: // www.Ардуино.cc/en/guide/portableide
Но спасибо, что приведет меня к этому, вкладывая все в одну и ту же пользовательскую папку.
Так что я могу настроить отдельные IDE: один для AVR, один для STM32 и один для ESP 😀

Янус
Вторник 28 августа 2018 г., 16:23
Портативный, предоставленный Arduino, все еще использует ваш профиль пользователя.

SourceCode для Arduino IDE завален этими.

// folder = новый файл (система.getProperty ("Пользователь.дом ")," Sketchbook ");

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

Изменение пользователя.дом для пользователя.DIR использует каталог запуска вместо вашего профиля.
Base, sshconfiglesetup, настройка & Настройка, все *.Файлы Java, все, что нужно было изменить.
Если вы используете Windows, возьмите Ztree, войдите в систему исходного дерева, выберите все, а затем ищите «Пользователь.домой », чтобы увидеть сами.


Янус.

Mrburnette
Вторник 28 августа 2018 г., 17:11
Arduino IDE не предназначен для профессионального использования.
Он предназначен как введение, а не коммерческий продукт.
Постоянно начинать все сначала не только ожидается, но и планируется.
Вы должны начинать с нуля снова и снова, когда учитесь.
Я не согласен с этой предпосылкой в ​​общей сложности. Согласился с тем, что Arduino IDE не является профессиональным продуктом, но это адекватно для новичков и даже некоторых талантливых старожилов. IDE не всегда облегчает программирование, но он также не мешает ни одному слишком сильно. Это именно то, что есть.

Концепция начала с дизайна не совсем точна. Пользователь всегда может сделать файл/сохранить как. Это позволяет иметь несколько шаблонов - откройте один и сохраняйте его в качестве нового стартового кода. Поскольку IDE может иметь несколько файлов открытыми, вырезать & Паста работает хорошо. Метафора с вкладками на самом деле работает очень хорошо, и хотя она была разработана для нескольких .INO -файлы это работает для библиотечной инкапсуляции.

В конце концов, Arduino IDE свободен. Есть ли не лучшая бесплатная IDE, это не проблема, проблема заключается в том, что для большинства пользователей IDE работает приемлемо. Это означает, что участники форума на многих форумах «Arduino-ish» имеют общий деноминатор для обсуждения и преподавания.

Луча

Янус
Вторник 28 августа 2018 г., 19:01
Мой плохой, мне было неясно, что я имел в виду.

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

Для меня тот факт, что Arduino не является «профессиональным» пакетом, является сильной.
Для того, что он делает, на самом деле просто структурировано.
Большинство вещей, с которыми я не согласен с этим, может быть облегчено.
У него также не хватает флеш -пух, который является очень хорошим бонусом.
Все, что у него есть, у него есть по причине.

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


Янус.

AG123
Вторник 28 августа 2018 г. 20:14
В другом примечании, эта библиотека USB Composite является добровольным усилием, поэтому я действительно благодарю Аппус за инвестирование в это и поделился этим

Я думаю, что разделение вариантов использования / классов устройств имеет довольно сильную достоинство, что сделало бы USB-сериал самостоятельно, USB-HID самостоятельно, USB-storage самостоятельно и т.д. В пределах USB-HID я думаю, что может быть еще более тонкое подразделение «вариантов использования», я обнаружил, что USB-HID буквально «довольно большой». Если кто -то скажет с клавиатурой + джойстик + мыши + обратная связь с датчиками (E.глин. температура, давление и т. Д.) Я думаю, что HID может буквально обслуживать это.

Создание USB-композитного устройства затем потребует немного больше усилий, возможно, немного больше или, если нужно его расколоть и создать «пользовательскую» версию USB-композита, которая оптимизирована для множества целей.

Понятие разработки отдельных вариантов использования / классов устройств самостоятельно заключается в том, что существует большое множество классов USB -устройств / вариантов использования
http: // www.USB.org/разработчики/docs/devClass_docs/

Это является добровольным усилием, другие могли бы внедрить и разрабатывать другие классы устройств E.глин. USB-Audio, USB-изображение, USB-Ethernet, USB-irda в аналогичной структуре и расширяйте эту библиотеку.
Это заставит BP/MM соответствовать тому, что на самом деле является: общее USB -устройство, его роль зависит от того, как человек делает эскиз и эту библиотеку, которая работает на нем, и, возможно, любых дополнительных соседних периферийных устройств

Янус
Вторник 28 августа 2018 г. 20:39
Согласованный.

Большинство внутренних проектов начинаются с малого, для одной работы, тогда кто -то начинает просто добавлять вещи случайным образом.
Когда мне пришлось реструктурировать существующий код для клиентов, я всегда использую одну и ту же базовую структуру.
Драйвер устройства, usb_base.h, как пример, я не очень оригинален на наименовании вещей.
Тогда сделайте с этим что -нибудь, USB_HID.H, чтобы следовать теме здесь.
Расширить это с помощью USB_KEYB.h, usb_mouse.H, USB_GAMEPAD.h или больше подобного, каждый из которых может #include <usb_base.час>
Я не настоящий программист C/C ++, так что извините, если я получу часть синтаксиса меньше, чем идеально.

Это оставляет usb_raw.H, если вы хотите по какой -то причине голые пакеты.
usb_temp.H для датчика температуры.
usb_bt.H для Bluetooth, который может включать программу отзывчивости Bluetooth.
USB_???.h для чего -то, о чем здесь еще не думал.

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

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


Янус.

AG123
Ср 29 августа 2018 г., 6:31
Одна вещь, чтобы отметить, что написание драйвера класса USB -устройства (E.глин. Спрятана) Библиотека - это в значительной степени приложение / самой эскиз. Основная петля Arduino () ничего не делает «ничего»
Следовательно, я бы посоветовал «наблюдателям» попробовать это и, возможно, расширить, я.эн. Напишите новые случаи USB -устройства, которые могут быть добавлены в «библиотеку».
Эта «библиотека» буквально является коллекцией приложений / эскизов. Это не просто «библиотека»

Арпрос
Пт 31 августа 2018 12:32
Прежде чем люди пишут реализации новых USB -классов, я бы предпочел рефактор код. В настоящее время он имеет один основной предел: композитное устройство может иметь только один экземпляр каждого плагина (E.глин., Только один сериал).

Янус
Пт 31 августа 2018 г., 15:20
Со своей стороны, я даже не начинаю, пока не закончу работать в F107.
Пока что это уже очень весело.

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

Я знаю, что люди скажут, чтобы просто прочитать SourceCode, но я не настоящий программист C/C ++.
То, что я делаю, это соответствует существующим шаблонам, пока не увижу под ними.
Логический уровень - это то, где я работаю, а C/C ++ в лучшем случае утомительна в моих глазах.

Мне не очень нравится Arduino IDE, но это намного проще в использовании, чем альтернативы, которые стоит хлопот.


Янус.