Спасибо, очень круто!
Подумывал тоже применить корутины на Stm, но, как понял из описания, они используют динамическую память, требуя наличия операторов new/delete. Можете подсказать (самому все осилить выглядит слишком сложным), так ли это и как вы с этим справились?
Позволю себе некропост и кратко напишу результаты почти месяца доработок и ускорения: EasyLy очень сильно помог в доведении до ума модуля USB, особенно в части скорости. Реализованы точки с двойной буферизацией, которые позволили приблизиться к пределу. В одну сторону около 8,8 Мбит/с, в тестах на одновременную двустороннюю передачу скорость в одном направлении получилась примерно 4,52 Мбит/с.
Хотел именно мнение от магазина, который это продаёт, честно говоря, очень интересно увидеть, как они напишут, что всё это бред (это сейчас моё личное мнение) с учетом присутствия подобного в ассортименте.
А можно ли ожидать обзор различных соединительных кабелей? Вокруг этой темы много споров, интересно экспертное мнение, чтобы все-таки сформулировать аргументированный ответ на вопрос «Межблочный кабель за 200к — это для психов или нет?».
А нужен ли прямой выход в интернет? Конкретно в этой статье железо через MQTT действительно стучит сразу в облако (хотя вопрос, хорошо это или плохо — работать всегда с облаком), в случае с BLE не обойтись без хаба (но и роутер, нужный для работы рассмотренного в статье устройства, тоже в этом плане можно считать хабом. Просто он достался «бесплатно», потому что все равно практически везде он есть).
И все-таки, не слишком ли жирно использовать ESP (а конкретно Wi-Fi) для IoT? На сколько батарейки хватит?
Купил недавно пару BLE чипов TB-03F, стоят немного (около 120 рублей на текущий момент), периферии чуть поменьше, правда, но для простых устройств (типа датчиков движения и т.п.) должно хватит. Вот только SDK у них ужасен, даже демо-проект запустить не получилось.
Кто глубоко в тему IoT погружен, может, стоит обратить внимание на Bluetooth (лучше дешевые, для дома пойдёт, Nordic-и как-то дороговато), а не тратить электричество на 8266?
А нельзя что-то типа вектора-индикатора прикрутить? Алгоритм примерно такой:
1) Выделить массив bool-переменных размера исходного массива (можно сжать и получить size/8 байтов). Это O(1) по времени, но O(n) по памяти.
2) Пройти в цикле исходный массив, заполняя в true соответствующие индексы этого bool-массива. Это O(n).
3) Пройти bool-массив, индекс первого false — это ответ. Тоже O(n).
Итого O(n) и даже константа небольшая.
Спасибо за ссылку, как-то мимо меня прошла эта статья.
Достаточно не «пропускать нужное»
Я сам так и делаю, но условий получилось около 10 (периферия у меня самая обывательская: мышка/клавиатура/Wi-Fi/флешка/принтер), так что именно для статьи подобрал еще один способ.
Мою реализацию с описанием, граблями и прочим вы, наверное, уже видели.
Конечно видел! В работе с HID много чего из этого вашего поста подчерпнул, когда доберусь до MSD, то снова придется подглядывать :)
В прошлый раз уже пожаловался, что почему-то с оптимизацией -Os не работает, но уверен, что проблема решаема. С Og код из примера (с настройкой тактирования/управлением светодиодом) занял 4300 Flash и 84 RAM, с Os 3200 Flash и 84 RAM.
Пропускную способность и скорость еще не измерял, честно говоря, не знаю, как это корректно проверить. Просто отправить N байтов и измерить время, это будет достоверный результат? То же самое с загрузкой процессора, как ее проверить? В бесконечном цикле подсчитать IDLE-время?
С портируемостью на F1 проблем вообще нет, все должно сразу заработать (еще в прошлый раз позаботился изменением выравнивания буфера USB), со старшими семействами библиотека несовместима, так как там OTG и все по-другому.
Судя по описанию, NINA-W102 (который esp32) как бы вспомогательный, для Wi-Fi и BT но если почитать характеристики esp32, то получаем, что этот «вспомогательный» модуль работает на частоте 160/240 Мгц, содержит АЦП (18 каналов), ЦАП (2), GPIO (10), SPI (4), I2C (2), UART (3) и еще по мелочи. На первый взгляд, это все мощнее «родительской» Arduino, тогда где смысл? Не может же микрофон стоит 20 евро?
Куб из-за возможности в GUI проинициализировать всё и сгенерировать код или сама IDE нравится? Просто сейчас студента озадачил генерацией заготовки проекта из кубовского ioc, но на своем фреймворке, и вот думаю, актуально ли это.
Не пробовал VSCode (+PlatformIO) с Stm8, но с Stm32 все, как мне кажется, более чем адекватно работает. Код можно вполне разделить на части, если есть какая-то личная библиотека, то она помещается в папку lib, нужно создать простой json с указанием расположения заголовков и исходников (или вообще разместить их соответственно в папках include/src и тогда вообще ничего делать не нужно). Отладка (говорю про stm32, поправьте, пожалуйста, если в stm8 все действительно по-другому) тоже вроде особых проблем не доставляет: watch-и можно поставить (правда, приходится часто пометить переменную как volatile), все регистры и периферия доступны, окно memory есть, пошаговое выполнение тоже, что еще нужно?
Согласен, что все очень гибко. Поэтому и остановился на варианте «Вставь дескриптор целиком». Хотя HID Descriptor tool мне очень не понравилась, хотелось бы увидеть графическую утилиту с понятным интерфейсом, желательно с кнопками типа «Добавить->Джойстик танка Т-72», а не как сейчас.
Подумывал тоже применить корутины на Stm, но, как понял из описания, они используют динамическую память, требуя наличия операторов new/delete. Можете подсказать (самому все осилить выглядит слишком сложным), так ли это и как вы с этим справились?
Купил недавно пару BLE чипов TB-03F, стоят немного (около 120 рублей на текущий момент), периферии чуть поменьше, правда, но для простых устройств (типа датчиков движения и т.п.) должно хватит. Вот только SDK у них ужасен, даже демо-проект запустить не получилось.
Кто глубоко в тему IoT погружен, может, стоит обратить внимание на Bluetooth (лучше дешевые, для дома пойдёт, Nordic-и как-то дороговато), а не тратить электричество на 8266?
1) Выделить массив bool-переменных размера исходного массива (можно сжать и получить size/8 байтов). Это O(1) по времени, но O(n) по памяти.
2) Пройти в цикле исходный массив, заполняя в true соответствующие индексы этого bool-массива. Это O(n).
3) Пройти bool-массив, индекс первого false — это ответ. Тоже O(n).
Итого O(n) и даже константа небольшая.
Это само собой, не любитель изобретать велосипеды и все с нуля искать.
Приму к сведению:) Хотя не знаю, когда до этого руки дойдут, лежит еще недоделанный ADC, а он явно более нужный.
Записать +- аналогично, циклы заменяются на раскрытие variadic-ов.
Я сам так и делаю, но условий получилось около 10 (периферия у меня самая обывательская: мышка/клавиатура/Wi-Fi/флешка/принтер), так что именно для статьи подобрал еще один способ.
Конечно видел! В работе с HID много чего из этого вашего поста подчерпнул, когда доберусь до MSD, то снова придется подглядывать :)
Пропускную способность и скорость еще не измерял, честно говоря, не знаю, как это корректно проверить. Просто отправить N байтов и измерить время, это будет достоверный результат? То же самое с загрузкой процессора, как ее проверить? В бесконечном цикле подсчитать IDLE-время?
С портируемостью на F1 проблем вообще нет, все должно сразу заработать (еще в прошлый раз позаботился изменением выравнивания буфера USB), со старшими семействами библиотека несовместима, так как там OTG и все по-другому.
Куб из-за возможности в GUI проинициализировать всё и сгенерировать код или сама IDE нравится? Просто сейчас студента озадачил генерацией заготовки проекта из кубовского ioc, но на своем фреймворке, и вот думаю, актуально ли это.