www.open-tager.ru http://www.open-tager.ru/forum/ |
|
Система Caustic http://www.open-tager.ru/forum/viewtopic.php?f=5&t=4128 |
Страница 73 из 108 |
Автор: | Ansat [ 01 июн 2016, 23:16 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies, Alexies писал(а): У пакета есть рандомный двухбайтовый id и TTL (time to live). Если ретранслятор слышит пакет, требующий подтверждения получения, но не слышит на него ответа в течении некоторого времени, он повторяет этот пакет несколько раз с некоторым интервалом. При этом у пакета на единицу уменьшается TTL. Хотел спросить, в вышеописанном используется что-то от технологии Enhanced ShockBurst™? Мой вопрос связан с тем насколько гарантирована доставка посылки с помощью nrf24l01 с одного раза (если реализовывать свой протокол связи) или без автоматической (встроенной) поддержки передач все тлен? Опытных/тестовых единиц не было? |
Автор: | Alexies [ 02 июн 2016, 00:24 ] |
Заголовок сообщения: | Re: Система Caustic |
Ansat писал(а): Alexies, Хотел спросить, в вышеописанном используется что-то от технологии Enhanced ShockBurst™? Мой вопрос связан с тем насколько гарантирована доставка посылки с помощью nrf24l01 с одного раза (если реализовывать свой протокол связи) или без автоматической (встроенной) поддержки передач все тлен? Опытных/тестовых единиц не было? Я не использую Enhanced ShockBurst. Его возможностей маловато, на мой взгляд, для задач лазертага. Подтверждение я реализую самостоятельно, просто посылаю специальный пакет в ответ. С точки зрения nrf24l01, у меня все девайсы сидят на одном и том же дефолтном хардварном MAC-адресе "e7 e7 e7 e7 e7", все слышат всех. В пакетах помимо данных передаю "самодельные" адреса отправителя и получателя. На такие адреса отвожу по 3 байта. Это что-то вроде IP. Плюс ещё упакованные 3 байта служебной информации: id пакета, ttl и бит "нужно ли подтверждение доставки". Остаётся ещё 32-9=23 байта полезной нагрузки. Чтобы осуществить гарантированную передачу данных, повторяю передачу пакета до тех пор, пока не придёт подтверждение (или не выйдет таймаут). В отличие от Enhanced ShockBurst это позволяет настраивать все параметры (таймауты, период повторения и т.п.), принимать пакеты между повторами передачи, делать ретрансляторы, совмещать пакеты с подтверждением и без (например, широковещательный пакет: "воскресить всю красную команду" не требует подтверждения) и делать некоторые другие вещи. Поскольку контроллер мощный и используется операционная система, то просто выделяется один поток на работу с сетью, для остальной программы это не создаёт трудностей. Хотя и без ОС у меня работало. Такой подход показал себя хорошо, связь работает стабильно, при интенсивной передаче никаких потерь из-за коллизий не происходит. |
Автор: | Pingvin [ 02 июн 2016, 05:40 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Pingvin писал(а): А у Вас меш-сеть реализована? С динамической маршрутизацией? Или обмен идет по принципу точка-точка в пределах радиовидимости? Нет, меш-сеть не нужна, динамическая маршрутизация - это избыточно. Поддержание перестраиваемых таблиц маршрутизации в наших условиях будет слишком затратным. У меня всё проще: У пакета есть рандомный двухбайтовый id и TTL (time to live). Если ретранслятор слышит пакет, требующий подтверждения получения, но не слышит на него ответа в течении некоторого времени, он повторяет этот пакет несколько раз с некоторым интервалом. При этом у пакета на единицу уменьшается TTL. Если ретранслятор слышит пакет, не требующий подтверждения (например, широковещательный), то всегда повторяет его однократно, уменьшая TTL. Чтобы избежать "эха" от других ретрансляторов, пакет с одним и тем же id проходит через ретранслятор только один раз (при повторном получении такого же id пакет отбрасывается). При ретрансляции меняется только TTL, всё остальное содержимое - прежнее. Но у меня пока нет действующего образца. Спасибо! Что то в этом роде и предполагал. Меш сеть - слишком затратна по ресурсам и много служебного трафика. Хорошее решение. Как смотрите на то, чтобы сделать спецификацию протокола открытой? |
Автор: | Alexies [ 02 июн 2016, 11:20 ] |
Заголовок сообщения: | Re: Система Caustic |
Я обновил, на всякий случай, репозиторий с прошивками и схемами: https://github.com/caustic-lt-system/caustic-public Исходники загрузчика: https://github.com/DAlexis/stm32-usb-bootloader Загрузчик применим для любых проектов. Обновляет прошивку из бинарного образа flash.bin. Вычисляет и сверяет хэши: если прошивка на карточке совпадает с уже зашитой в МК, ничего не перепрошивается - другими словами, удалять с карты ничего не надо. Работает только на stm32f103ret6, но модификация под другие контроллеры серии stm32f1 сводится к изменению адресов да пинов в некоторых местах, т. е. портировать не трудно. Собирается, как проект Eclipse. Руки не доходят перейти на цивилизованный CMake. |
Автор: | LTagKirov [ 02 июн 2016, 12:11 ] |
Заголовок сообщения: | Re: Система Caustic |
Alexies писал(а): Я обновил, репозиторий с прошивками и схемами: https://github.com/caustic-lt-system/caustic-public Ридми желательно поподробнее. Какие файлы складывать на флешку, какой вариант платы самый последний (лучше удалить все старые варианты) и тд. Ещё момент непонятно можно ли записать файл прошивки на флешку через USB не вынимая сд-карту из макета ? Поставить разъём USB на корпус макета проще - чем разбирать маркер каждый раз для смены прошивки. Собирать радиомост для перепрошивки маркера большинству будет лениво.
|
Автор: | Alexies [ 02 июн 2016, 12:22 ] |
Заголовок сообщения: | Re: Система Caustic |
LTagKirov писал(а): Ридми желательно поподробнее. Какие файлы складывать на флешку, какой вариант платы самый последний (лучше удалить все старые варианты) и тд. Ещё момент непонятно можно ли записать файл прошивки на флешку через USB не вынимая сд-карту из макета ? Поставить разъём USB на корпус макета проще - чем разбирать маркер каждый раз для смены прошивки. Собирать радиомост для перепрошивки маркера большинству будет лениво. Окей, напишу ридми. Да, доступ к карте по USB есть, помимо зарядки это единственная функция USB-порта на данный момент. При запуске контроллера загрузчик некоторое время ждет установления USB-соединения. Если соединения нет - запуск прошивки. Иначе - режим кардридера. То есть, чтобы зайти с компа на sd-шку, достаточно выключить девайс, подключить USB-шнур, включить девайс. По радиомосту пока прошивки нет. Да, старые версии удалю. Там есть ещё некоторые под "лазерный утюг" с соответствующей разводкой, удобной для самодеятельности. Но они старые, я их не поддерживаю. Новые платы ЛУТом не изготовить: много переходных отверстий 0,3мм под smd-компонентами. |
Автор: | Pingvin [ 02 июн 2016, 14:02 ] |
Заголовок сообщения: | Re: Система Caustic |
А как проект в Эклипсе открыть? Копирую папку bootloader_usb в свой workspase - бесполезно... |
Автор: | Alexies [ 02 июн 2016, 14:25 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): А как проект в Эклипсе открыть? Копирую папку bootloader_usb в свой workspase - бесполезно... На всякий случай напишу полную инструкцию: 0. Желательно использовать последний эклипс. Можно сразу сборку для C/C++, тогда п.1 пропустить, можно - чистый, где из коробки только Java. 1. Сначала нужно поставить C/C++ development toolkit: Help->Install new software... В поле Work with выбираем http://download.eclipse.org/releases/mars. Ниже Programming languages->C/C++ development tools. 2. Затем имеет смысл поставить GNU ARM Plugin. В поле Work with вбиваем http://gnuarmeclipse.sourceforge.net/updates , снизу выбираем нужное (можно всё выбрать) 3. В системе должен стоять компилятор gcc для ARM. Под линуксом для этого нужны пакеты arm-none-eabi-gcc, arm-none-eabi-binutils, arm-none-eabi-gdb, arm-none-eabi-newlib. Как поставить под виндой - не помню, нужно загуглить, но там всё просто. 4. В эклипсе выбрать C/C++ Perspective (Window->Perspective->open perspective->other, ну или просто нажать кнопку на панели инструментов). Это что-то вроде режима работы Eclipse. Теперь он готов для программирования на C++. 5. Скопировать bootloader_usb в workspace, а затем File->Import->General->Existing Project into Workspace. Далее указать директорию workspace-а, ну и там по контексту. После этого проект должен появиться. Можно собирать. Я собирал таким образом на разных Linux-машинах и под виндой, всё работало. Если будут проблемы - пишите. |
Автор: | Pingvin [ 02 июн 2016, 19:40 ] |
Заголовок сообщения: | Re: Система Caustic |
Спасибо! Да эклипс у меня настроен был, а вот как проект импортировать - не сообразил. Ща буду пробовать. Такой вопрос у меня... Я ведь тоже пробовал бутлоадер размещать в конце флеша, а прошивку - без смещения. Но что то не вышло. Прошивается флеш правильно, прошивка даже стартует, но вот UART не работал ни в какую! Я подозреваю, что либо "хвосты" бутлоадера плохо зачистил либо что то не так делаю при запуске прошивки. Я до сих пор не понимаю - что нужно делать со стек-поинтером? Его нужно инициировать перед запуском прошивки? А разве в самой прошивке нет его инициализации? Тут я "плаваю" - нет у меня чёткого понимания. P.S. Получилось импортировать! Но теперь ошибка при сборке 23:04:26 **** Build of configuration Debug for project bootloader-usb **** make all Building file: ../Src/bsp_driver_sd.c Invoking: Cross ARM C Compiler arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Og -fmessage-length=0 ... cc1: error: invalid option argument '-Og' make: *** [Src/bsp_driver_sd.o] Ошибка 1 23:04:27 Build Finished (took 575ms) Попробовал под Виндой собрать - опять ошибка: make all 'Building file: ../Src/bsp_driver_sd.c' 'Invoking: Cross ARM C Compiler' arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Og -fmessage-length=0 -fsigned-char -ffunction-sections -fdata-sections -ffreestanding -Wall -Wextra -g3 -DDEBUG -DUSE_FULL_ASSERT -DSTM32F10X_HD -DUSE_STDPERIPH_DRIVER -DHSE_VALUE=8000000 -DSTM32F103xE -I"C:\User... ... cc1.exe: error: argument to '-O' should be a non-negative integer make: *** [Src/bsp_driver_sd.o] Error 1 00:14:49 Build Finished (took 9s.922ms) |
Автор: | Alexies [ 02 июн 2016, 22:29 ] |
Заголовок сообщения: | Re: Система Caustic |
Pingvin писал(а): Спасибо! Да эклипс у меня настроен был, а вот как проект импортировать - не сообразил. Ща буду пробовать. Такой вопрос у меня... Я ведь тоже пробовал бутлоадер размещать в конце флеша, а прошивку - без смещения. Но что то не вышло. Прошивается флеш правильно, прошивка даже стартует, но вот UART не работал ни в какую! Я подозреваю, что либо "хвосты" бутлоадера плохо зачистил либо что то не так делаю при запуске прошивки. Я до сих пор не понимаю - что нужно делать со стек-поинтером? Его нужно инициировать перед запуском прошивки? А разве в самой прошивке нет его инициализации? Тут я "плаваю" - нет у меня чёткого понимания. При загрузке контроллера в стек-поинтер хардварно записывается число, которое лежит по нулевому адресу флеша. Если такого поведения ожидает прошивка, то это нужно сделать перед тем, как передавать ей управление. Однако многие генераторы кода, в том числе Cube, сами на всякий случай записывают туда то, что считают нужным, во время инициализации, поэтому всё работает даже если SP не трогать. Но правильно - взять первые 4 байта из прошивки (не бутлоадера) от адреса 0x8000000, и класть в SP. Pingvin писал(а): P.S. Получилось импортировать! Но теперь ошибка при сборке ... cc1: error: invalid option argument '-Og' ... Попробовал под Виндой собрать - опять ошибка: ... cc1.exe: error: argument to '-O' should be a non-negative integer Флаг "-Ox" определяет степень оптимизации. Когда задано -O0 ... -O3 - это оптимизация производительности, 0 - выключена, 1-2 - включена, 3 - сильная оптимизация, нестабильна. Когда задано -Os - это минимизировать размер, а -Og - это оптимизировать для отладки. Последний добавили недавно. Судя по всему, оба ваших компилятора его не поддерживают. Самый простой вариант - собрать не Debug, а Release. Там этот флаг отключен. Или покопаться в настройках проекта, и убрать этот флаг из дебажной версии. По факту он не нужен, отладчик всё равно так себе работает. Ещё меня смущает, что используется cc1 вместо arm-none-eabi-gcc. Такое ощущение, что он пытается собрать обычным компилятором, а не микроконтроллерным. |
Страница 73 из 108 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |