Перейти к содержанию
    

xvr

Свой
  • Постов

    3 583
  • Зарегистрирован

  • Посещение

  • Победитель дней

    2

Весь контент xvr


  1. Вы избавитесь от if/switch по типу протокола, и что самое главное вы сможете добавлять новые протоколы ничего не меняя в остальном коде. Протокол должен вызывать метод (что то типа recv) от comport'а Если одновременно может быть активен только один протокол, то проще простого - делаете поле типа указатель на бызовый тип для всех протоколов, потом (в зависимости от checkbox) создаёте конкретный класс протокола (наследник) и присваиваете его в это поле. Всё, заботу о дальнейшем берёт на себя С++ полиморфизм. Если надо одновременно несколько протоколов, то встаёт вопрос - как они будут делить трафик из comport'а. напрашивается некий арбитр, который сам по себе является протоколом (таким же как остальные), и который внутри себя держит массив указателей на обслуюиваемые им протоколы. Вот тут уже в полный рост полиморфизм. Этого быть не должно - поле protocol должно быть одно. И создавать надо один из Protocol_1 или Protocol_2 Описание Comm покажите У вас GUI программа. Так же у вас взаимодействие с COM портом. Это вещь асинхронная и требующая либо отдельного потока либо встраивания его обслуживания в цикл обработки оконных сообщений (чего никто не делает, по причине сложности). Общение отдельного потока с GUI потоком требует синхронизации через оконные сообщения, механизм слотов/сигналов это обеспечивает автоматически. На 'чистом С++' вам придётся с нуля эти самые слоты и сигналы написать самому. Примой вызов функци по указателю (а равно как и виртаульного метода) приведёт к трудно уловимым глюкам в вашем GUI. Синхронизация ОБЯЗАНА быть. Возможно ваш компонент com порта уже это обеспечивает, тогда можете вызывать методы напрямую.
  2. Не совсем. То, что показывает gdb прописано в target descriptor, который должен считываться с удалённого девайса. Но можно его и вручную подсунуть (set tdesc в gdb) https://sourceware.org/gdb/onlinedocs/gdb/Target-Descriptions.html#Target-Descriptions
  3. В Qt принят другой подход, они используют не виртуальные функции а слоты и сигналы. Ваш обьект последовательного порта, вместе с обработчиком протокола, заворачиваете в класс (назовём его SerialClass), наследник QObject. В нём создаёте сигналы для отправки обработанных данных. Для приёма данных создаёте слоты. Ответную часть оформляете так же в виде класса (назовём его ClientClass), так же наследник QObject, так же со слотами и сигналами. Далее запускаете SerailClass в отдельном потоке (QThread), клиента в потоке GUI и соединяете их с помощью connect Для МК вполне, для ПС + Qt слишком - 90% этого берёт на себя ОС, 9% - Qt. Оставшийся процент лучше написать с нуля 🙂
  4. Так, для справки. Нейронные сети без обучения не работают, очевидно. А для обучения, даже самой простой сети, нужно много входных данных. Как минимум десятки тысяч сэмплов, а лучше сотни. Без таких объёмов сеть, с хотя бы минимальным качеством, не обучить.
  5. Не просто добавляем. Собственно с изобретения алгоритма обучения и начался бум нейросетей. Сами они были известны очень давно, но обучать из не умели. В общем смотри алгоритмы backpropagation - https://ru.wikipedia.org/wiki/Метод_обратного_распространения_ошибки
  6. Все занимаются, кому только не лень. GPT чаты - это достаточно 'применимо'? Распознавание речи, синтез, обработка и классификация изображений, неточный поиск в поисковиках, и многое другое. На любой. Для тренировки используют нечто высокопараллельное - GPU и FPGA (теоритически). Для работы достаточно и обычного CPU (хотя GPU будет не лишним, но можно гораздо слабее, чем для тренировки) Из софта используют специальные фреймворки - нижний уровень на С/OpenCL/CUDA, верхний - Python: PyTorch, Keras
  7. Для FreeRTOS может быть и мало. Какая у вас установка размера стека? 3 таски (2 ваши + idle) + 2 TCB могут всю память легко сьесть. Всё таки для классических RTOS нужно памяти на порядок больше.
  8. энкодер и stm32f103

    Вместо этого поставьте
  9. Вспомнилась мне история разработки компилятора. Компилятор этот писала весьма и весьма солидная фирма, писала много лет. Над тестированием этого всего работал целый отдел. Тестов было много - десятки тысяч. Выпускается следующая версия, в ней было несколько координальных улучшений/изменений. Всё было самым тщательным образом оттестированно, всё ок. Выпустили версию, конечно у пользователей тут же нашлись баги, причём у весьма крупных (перым насколько помню прислал баг репорт adobe). Очень порадовала приписка к письму с багрепортом - "вы там компилятор перед выпуском хоть как то тестируйте, в Интернете дофига опенсоурс программ - возьмите парочку". Резюме - никакое тестирование не сможет отловить все баги, а пользователи, которые на них наступают, зачастую не имеют не малейшего представления что и как тестировалось. Они видят, что у них не работает, и спускают всех собак на разработчиков, тестировщиков и всю фирму сразу, не разбираясь в подробностях. С другой стороны, если бы компилятор выпустили без тестов вообще, то и компилятор и фирму в целом просто похоронили бы невзирая ни на прошлые заслуги ни на имя.
  10. Эта ошибка значит 'где то какая то хрень случилась'. Не пробовали в лог от vivado заглянуть (собственно где она и случилась)? axi_ad9361_ip.log
  11. Тогда запасайтесь ведром транзисторов - этоу вас будет расходный материал, для 'прохождения пути' 😞 Или при отладке вашего ККМ (кстати, почему именно с ККМ вы решили начать свой путь - он ведь не самая необходимая часть AC/DC писточника?) включайте его в сеть последовательно с 100 ватной лампочкой накаливания (только именно накаливания, всякие модные энергосберегающие разновидности не подойдут). Это позволит всм пол ведра транзисторов сэкономить 🙂 NB. Дроссель вам придётся мотать самому - вероятность, что вы нечто похожее найдёте в магазине практически равна нулю 😞 IMHO.
  12. По видимому для ТС степень сложности ОС пропорциональна физическим размерам устройства, на котором она стоит 🙂 Мобильный телефон весьма небольшое устройство 🙂
  13. По скорости потянет? Я очень сомневаюсь, что есть FPGA с аппаратным QPI, а soft IP явно не справится 😞
  14. Никаких. С тем же успехом можете свой контролер скотчем к планке примотать - результат будет тот же, т.е. никакого 🙂 Электрически наверное можно сделать переходник, который одним концом будет вставляться в слот, а в него будет вставляться память. В середине будет ваш перехватчик. Паяться проводами к DDR4 бесполезно - перестанет работать (слишком большие частоты). С дугой стороны, ну подключитесь вы к ногам, что дальше? Там эффективные частоты порядка 2-3Ghz (с учетом того, что она DDR). Чем вы будете снимать обмен на такой частоте? И куда сливать такой поток? Подозреваю, что для перехватчика понадобтся ASIC (тольео если кто нибудь не сделал нечто подобное, что вряд ли). Но CPU об этом знает, и прилагает немало усилий, что бы результаты работы DMA всё же в конце концов попали в кэши. Ваше же устройство никто синхронизировать не будет, так что имеет значение, и большое.
  15. А если при приёме склеится конец одного пакета и начало следующего? У вас излишек данных не переносится в следующий пакет, а просто затирает память за переменной ANSWER_INFO_VAR. Так что вы потеряете кусок следующего пакета, после чего ВСЕ пакеты поедут со сбитыми границами (если конечно ваша программа не навернётся раньше из за испорченной памяти после ANSWER_INFO_VAR)
  16. 'Мобильная" - да, но далеко не 'простейшая'
  17. Стандартный плагин в VS Code. Ага, но к нему нужен JTAG адаптер (аппаратный), с чего собственно ТС и начал тему. А gdb stub работает через тот же UART, который используется для програмирования ESP32, и который на плате уже есть (в виде переходника USB-UART) Для JTAG нужна или соотвествующая плата (в 2-3 дороже, чем обычная на ESP32) или отдельный внешний аппаратный адаптер Он уже больше, чем просто code editor - к нему столько плагинов написали, что он скоро отберёт у когонибудь одежду и пойдёт искать Сару Конор 🙂
  18. В idf есть из коробки. Ничего скачивать не надо. У VS Code вроде есть свой gdb адаптер, и бесплатный. На сайте у espressif всё довольно подробно описано. Кроме того, все платы с esp32 и usb подключаются к компу, для их програмирования JTAG не нужен.
  19. А GDB Stub вместо JTAG не устроит? Он самый и есть - https://aliexpress.ru/item/1005004539706684.html Цена не очень гуманная 😞
  20. Абсолютно. Скорее всего там 1 USB для UART програмирования, и 2й подключён к самому ESP32 Сам Espressif знает об только об одной плате с встроенном JTAG - https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-wrover-kit-v3.html
  21. Так у вас User program вроде на 0x8000? Или таблица прерываний всё же в загрузчике осталась?
  22. Тестирование это весьма непростая штука. Где то в 80е (прошлого века) группа программистов писала компилятор. Написали, стали тестировать. Какие то тесты сами написали, что то взяли готовое, что то из богатой библиотеки заказчитков. Много багов выловили. Продолжалось это месяца три. В конце вычистили всё, тесты все проходили, в том числе несколько весьма больших программ (по тем временам). В общем всё - можно здавать заказчику. И тут мимо них пробегал их коллега, который в другом отделе занимался тестированием (это была его основная работа). Его попросили, по старой дружбе, сделат пару тестов. Он взял исходники компилятра, поизучал пару дней и написал около сотни крохотных тестов на различные граничные условия. Запустили. ВСЕ ТЕСТЫ УПАЛИ! После 3х месяцев тестирования разработчиками 😞 Так что ищите грамотного тестировщика, это совсем другая специфика. PS. Информация из первых рук - мне это рассказал человек, который входил в группу, писавшую компилятор.
×
×
  • Создать...