Как стать автором
Обновить

Комментарии 9

Сколько флеша/ОЗУ отжирает эта библиотека и какова пропускная способность и загрузка процессора? Что с портируемостью на другие семейства (F1xx...)?

В прошлый раз уже пожаловался, что почему-то с оптимизацией -Os не работает, но уверен, что проблема решаема. С Og код из примера (с настройкой тактирования/управлением светодиодом) занял 4300 Flash и 84 RAM, с Os 3200 Flash и 84 RAM.
Пропускную способность и скорость еще не измерял, честно говоря, не знаю, как это корректно проверить. Просто отправить N байтов и измерить время, это будет достоверный результат? То же самое с загрузкой процессора, как ее проверить? В бесконечном цикле подсчитать IDLE-время?
С портируемостью на F1 проблем вообще нет, все должно сразу заработать (еще в прошлый раз позаботился изменением выравнивания буфера USB), со старшими семействами библиотека несовместима, так как там OTG и все по-другому.
Позволю себе некропост и кратко напишу результаты почти месяца доработок и ускорения: EasyLy очень сильно помог в доведении до ума модуля USB, особенно в части скорости. Реализованы точки с двойной буферизацией, которые позволили приблизиться к пределу. В одну сторону около 8,8 Мбит/с, в тестах на одновременную двустороннюю передачу скорость в одном направлении получилась примерно 4,52 Мбит/с.
Stm32 + USB на шаблонах C++. Продолжение. Делаем CDC

Вспоминая вот эту статью, хотелось бы чтобы вы портировали свой код на f103 и дали автору на тестирование. Будет 4-й вариант.
WireShark с установленным UsbPcap оказался весьма удобным, он нормально парсит все данные, так что поиск ошибок значительно упрощается. Главное, что нужно сделать — правильно установить фильтры. Не нашел ничего лучше, кроме выполнить следующие две операции:

Зачем такие сложности!
Достаточно не «пропускать нужное», а «отсекать ненужное», то есть заблокировать все, чьи адреса принадлежат устройствам, который нам неинтересны. Что-то вроде
!((usb.addr=="1.17.0") || (usb.addr=="1.18.0") || (usb.addr=="1.18.1"))
Привязку к шинам можно получить из простого lsusb, а можно просто банить все, что излишне спамит в лог wireshark'а.
При постоянных перепрошивках и переподключениях ведь положение нашего устройства на шине будет постоянно меняться. А vid:pid появится только после энумерации. Тогда как если заблокировать лишнее, пакеты энумерации останутся видны.
Далее планирую добавить еще класс Mass Storage Device, и на этом, наверно, можно остановиться.

Мою реализацию с описанием, граблями и прочим вы, наверное, уже видели.
Вспоминая вот эту статью
Спасибо за ссылку, как-то мимо меня прошла эта статья.
Достаточно не «пропускать нужное»
Я сам так и делаю, но условий получилось около 10 (периферия у меня самая обывательская: мышка/клавиатура/Wi-Fi/флешка/принтер), так что именно для статьи подобрал еще один способ.
Мою реализацию с описанием, граблями и прочим вы, наверное, уже видели.
Конечно видел! В работе с HID много чего из этого вашего поста подчерпнул, когда доберусь до MSD, то снова придется подглядывать :)
Я сам так и делаю, но условий получилось около 10 (периферия у меня самая обывательская: мышка/клавиатура/Wi-Fi/флешка/принтер), так что именно для статьи подобрал еще один способ.

Но упомянуть его в статье все же стоит
когда доберусь до MSD, то снова придется подглядывать
В репозиторий тоже не забудьте заглянуть, я там документацию складывал, которой руководствовался. Не помню давал ли я на нее прямые ссылки в тексте.
когда доберусь до MSD
Может, интереса ради, запилите реализацию чего-то поинтереснее флешки? Оптический диск, флоппи-привод, считыватель с магнитной ленты? Оптический диск, кстати, не только развлечение, но и отличный способ установки вареза потенциально установка старых ОС или на старые машины.
Но упомянуть его в статье все же стоит
Поправил.
В репозиторий тоже не забудьте заглянуть
Это само собой, не любитель изобретать велосипеды и все с нуля искать.
Может, интереса ради, запилите реализацию чего-то поинтереснее флешки?
Приму к сведению:) Хотя не знаю, когда до этого руки дойдут, лежит еще недоделанный ADC, а он явно более нужный.
ADC? В смысле аппаратный АЦП в контроллере? Там же вроде ничего особенно сложного нет. Ну разделение последовательности измерений и биты наркоманские, но тут ничего удивительного.
Хотя с таймерами или другим принудительным запуском я его не связывал, все управление ручное. А вот с DMA скрестил.
С учетом того, что именно в МК я шарю близко к 0, сложно дается. Все-таки полезно понимать суть всех процессов.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.