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

Шаманъ

Участник
  • Постов

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

  • Посещение

Весь контент Шаманъ


  1. STM32MP1 - bare metal

    Если не секрет, а в чем конкретно он "НЕДО"?
  2. Только поверхностно, HALом не пользуюсь, поэтому даже при желании и наличии времени всех нюансов не увижу. Из того, что "бросилось в глаза": 1. Обычно на таких частотах память нормально работает с CAS LATENCY 2, у Вас стоит 3. Я бы посмотрел датащит на память на предмет правильного значения. 2. Зачем у Вас стоит флаг SDRAM_MODEREG_BURST_LENGTH_2, если FMC не поддерживает эту фичу (стоит посмотреть датащит на предмет правильного значения этого флага)? Кстати, а Вы проверяли на какой частоте реально работает SDRAM, LTDC?
  3. На С. Так замеряйте встроенным в МК таймером
  4. Слой, то один, но до этого времени Вы упорно пытались ARGB8888 выводить, что в общем-то очень плохая идея. Специально для Вас проверил (правда F7 у меня нет, проверял на STM32H743, память на 100МГц) заполнение 128МБ SDRAM у меня занимает 342.5мс, кэш данных практически не влияет (что логично для такой операции). Код далек от оптимального (может правда GCC в этот раз смог :)) - обычный цикл с записью словами по 32бита, тем не менее выходит 373.7МБ/с, что почти соответствует максимальной пропускной способности SDRAM в 400МБ/сек. Т.е. где-то в 80раз быстрее, чем у Вас. Я бы смотрел инициализацию FMC и, возможно, настройки тактирования. Вы еще учитывайте, что кроме чтения LTDC часть пропускной способности FMC заберет рисование. В зависимости от того что Вы будете выводить это может быть и больше, чем нужно LTDC :)
  5. Как уже написали все упрется в пропускную способность FMC. То, что Вы хотите не для реального применения. Урежьте "осетра" до одного слоя LTDC, 16битного цвета и частоту кадров до 30..40к/с (правда, не все панели будут нормально работать на такой частоте), тогда более менее нормально будет.
  6. STM32MP1 - bare metal

    Не то, чтобы СТМ32 позволяет - это можно сделать на любом процессоре, но на СТМ32 за счет DMA2D это можно сделать эффективно. Правда для этого нужно поменять концепт построения графической подсистемы (если использовалось наложение слоев через LTDC) и использовать DMA2D.
  7. STM32MP1 - bare metal

    Обсуждать это смысла нет. Могу в свою очередь спросить зачем гнать целый дополнительный слой из памяти на LTDC, когда прозрачность, как правило, требуется на относительно небольших участках изображения (например, сетка на графике, текст, или иконки какие-нить, и даже если это окно оно не занимает весь экран). Так что здесь все зависит от конкретной задачи. Немного дела разгребу и постараюсь показать, что получается с Н7 и DMA2D, заодно будет понятно откуда прозрачность иногда "набегает".
  8. STM32MP1 - bare metal

    Вы слишком прямо мыслите :) Да и флеша не так много у Н7. Есть и еще 100500 примеров когда индексированный цвет это великое благо и не только по причине меньшего места. Например, шрифты со сглаживанием DMA2D тоже умеет обрабатывать (это в некотором смысле картинки с индексированным цветом, разве что палитра очень специфическая ;)). Ну хорошо, допустим Вы делаете окно с прозрачностью поверх фона. Задействовали два слоя, потом Вам понадобилось еще окно сверху (тоже с прозрачностью), а в нем текст полупрозрачный и сетка сверху тоже полупрозрачная - как Вы это сделаете контроллером? К тому же при таком подходе очень сильно нагружается память. Можно сделать по-другому - рисуете через ДМА2Д с прозрачностью, а потом показываете через LTDC (или как там у Вас оно называется) в одном слое. В таком варианте нет ограничений на кол-во слоев, ну кроме производительности. DMA может медленнее работать из-за разной разрядности шин (например, ядро подключено 64ьитами, а ДМА только 32), но здесь главная фишка в вычислениях. Если бы речь шла просто про перемещение и заполнение "прямоугольников" то такой DMA2D не особо и нужен. Оно я смотрю не только в AllWinner "так себе", и в общем-то не понятно как оно и в MP1. С этим я так понял не все гладко у многих. Вопрос к Геннадию, можешь померять сколько процесор+память кушают (без подсветки дисплея или с подсветкой на максимуме)?
  9. STM32MP1 - bare metal

    DMA2D это фактически простенький 2D графический ускоритель. Кроме альфа каналов он еще умеет преобразовывать формат картинки, "раскрашивать" индексированный цвет палитрой или перекрашивать градации серого в градации цвета. У меня вся графика выводится через него, за исключением одного весьма специфического элемента, который оказалось быстрее нарисовать процессором (и то это произошло в силу особенностей работы SDRAM памяти). На традиционных операциях (вывод текста, картинок, прямоугольники, маски и т.п.) через DMA2D получается в разы быстрее, чем процессором, плюс процессор освобождается. Поскольку я активно пользуюсь DMA2D и его не заменить в моем случае MDMA, то по моим оценкам переход на MP1 может дать какой-либо выигрыш только за счет наличия двух ядер и намного большей производительности подсистемы памяти (в Н7 это узкое место при работе с графикой). Интересно конечно какой выигрыш будет (и будет ли :))... Ну и интересно посмотреть что будет под Linux с 3Д ускорителем. Наверное таки куплю плату с MP1 поэкспериментирую (заодно может и с OpenGL поиграюсь), смотрю они не дорогие.
  10. STM32MP1 - bare metal

    Да, нашел уже. Под OpenGL писал последний раз больше 20 лет назад, и всех нюансов уже не помню, но чую что-то там он не то делал. Прикупить какую-нить тестовую плату с этим МР и поиграться что ли... Хотя если на Линукс перелазить не факт, что это самое удачное решение Вот! Раз так значит под Н7 DMA2D не использовался, а именно в нем сила Н7 :) Та не - жалкое подобие DMA2D, которое не умеет накладывать слои с альфа каналами и преобразовывать формат изображения.
  11. STM32MP1 - bare metal

    Странный тест. Как по мне лучше тестировать определением времени выполнения/скорости отдельных примитивов (например столько-то символов в сек. вывод), ну или на более менее законченном UI (тогда можно уже просто судить о применимости/запасе данного решения для конкретной задачи). ЦОС по описанию простая, законченного UI не наблюдаю, да и сложной динамичной графики нет, по сути даже не понятно зачем два слоя. У меня более сложную картинку STM32H7 рисует со скоростью более 100fps (экран такой же). В отношении графики для меня не очевиден выигрыш STM32MP1 перед STM32H7 если не использовать 3D ускоритель у MP1. Интересно, а кто-нибудь пробовал оценить производительность 2D графики при задействовании 3D ускорителя? Понятно, что это потянет за собой линукс, но без ускорения графики, как по мне, для систем с динамичной графикой камень не сильно интересный.
  12. Приветствую всех! Просветите пожалуйста, есть 10шт. кварцев, и генератор (пирс на логике, третья гармоника). Производитель (точнее посредник) утверждает, что разброс у них 30ппм вместо обещанных 10ппм из-за неправильной нагрузочной емкости. Реально ли такое (я понимаю частота сдвинулась, но чтобы в разные стороны)?
  13. STM32MP1 - bare metal

    Даю, правда использовать вряд ли у Вас получится - я ведь писал, ключевой момент более удобная структура обрабатываемых данных. Кроме того порядок комманд может оказаться не оптимальным для А53 (впрочем я не утверждаю, что он оптимален для А9 :)). И да, если исходные массивы положить в SRAM, то 2.5кГц выходит. void cplxmla(const float * sr, const float * si, const float * refr, const float * refi, float * restrict dr, float * restrict di, int len) { len = len / 4; while(len--) { float32x4_t sr_v = vld1q_f32(sr); float32x4_t si_v = vld1q_f32(si); float32x4_t refr_v = vld1q_f32(refr); float32x4_t refi_v = vld1q_f32(refi); float32x4_t ar_v = vmulq_f32(sr_v, refr_v); float32x4_t dr_v = vld1q_f32(dr); float32x4_t ai_v = vmulq_f32(si_v, refr_v); float32x4_t di_v = vld1q_f32(di); ar_v = vmlsq_f32(ar_v, si_v, refi_v); ai_v = vmlsq_f32(ai_v, sr_v, refi_v); dr_v = vaddq_f32(dr_v, ar_v); di_v = vaddq_f32(di_v, ai_v); sr += 4; si += 4; refr += 4; refi += 4; vst1q_f32(dr, dr_v); dr += 4; vst1q_f32(di, di_v); di += 4; } }
  14. STM32MP1 - bare metal

    Ручная оптимизация с intrinsic-функциями дала 2.2кГц. Наверное можно еще попереставлять команды для лучшей загрузки конвеера, но уже лениво... Таки А9 в разы быстрее М7, но подход нужен аккуратный.
  15. STM32MP1 - bare metal

    Нет выравнивание не при чем. Задумайтесь как то, что Вы передает функции загружать в регистры VFP и сразу станет ясно, что это делать придется через одно место. На С оно красиво, а в коде увы...
  16. STM32MP1 - bare metal

    Немного оптимизировал структуру данных. Итог - при той же функциональности 2кГц без разворачивания цикла и 2.09кГц при разворачивании "на 4". Это при работе из DDR с включенной когерентностью кэшей для двух ядер.
  17. STM32MP1 - bare metal

    Но это не значит, что он будет использоваться
  18. STM32MP1 - bare metal

    У меня STM32H743 (@400MHz) выдает 1.018кГц (что пересчитывается с учетом частоты +- в тот же результат). Но всем кто когда-либо писал ЦОС алгоритмы для М7 должно быть известно, что циклы у них забирают сильно много ресурсов. Если развернуть цикл "на 8", то частота вырастает до 1.193кГц - 17% прироста однако ;). Теперь про A9. Достал один старый проект (Cortex-A9@666MHz), всунул туда "тест", итак: - массивы в DDR, максимум что вышло 1.63кГц - два массива в SRAM, один в ДДР - 1.71кГц Интересно, что последние версии GCC существенно проигрывают в производительности, может правда установки по-умолчанию отличаются - не заморачивался. Еще один интересный момент - попытка развернуть цикл на А9 дала обратный эффект, причем очень сильный. Для полной картины не хватает варианта оптимизированного руками под неон.
  19. STM32MP1 - bare metal

    А на какой частоте ядро при этом работает?
  20. STM32MP1 - bare metal

    Что-то не сходится. Если 1.16кГц, то это 1/1.16/2 = 0.431мс Я вообще пользуюсь OOCD и на FT2232D примочкой. Работает со всем, если с чем-то не работает, всегда можно допилить ;) Весной допиливал, чтобы с двумя ядрами цинка можно было работать более менее нормально
  21. STM32MP1 - bare metal

    Как будет время проверю у себя на A9 :) Так сказать для статистики Внешняя память на Н7 не быстрА, но если ее правильно приготовить получается весьма неплохо. И да, у меня дисплей 1024х600
  22. STM32H7 SDMMC

    Речь про регистр IDMABSIZE я так понимаю? Вы описание его внимательно прочитайте - этот регистр используется только в режиме с двумя буферами. В обычном режиме через IDMA можно пропустить столько сколько нужно данных (размер задается через DLEN).
  23. STM32 USB FS OTG

    Если хочется бесплатно, то Microsoft Message Analyzer.
  24. STM32H7 и WiFi

    Спасибо всем ответившим! Присматривал давно СС3120, но не хватало 5ГГц, а теперь смотрю все есть :) Кстати я так понимаю они совместимые (в смысле если драйвер перетащить на STM32 и под мою "экосистему", то он будет работать и с 3120 и с 3135, разумеется с необходимыми поправками для использования второго диапазона)? Т.е. можно наверное пока модулей на 3135 нет, поиграться/запустить все на 3120?
  25. STM32H7 и WiFi

    Приветствую всех! Посоветуйте какой-нить беспроблемный вариант добавления wifi к девайсу на базе STM32H7. Требования: 1. Поддержка 802.11n и очень желательно поддержка 5ГГц диапазона. 2. Передается/принимается до 10 UDP потоков с общей скоростью до 20Мбит/с 3. Приветствуется экономичность, т.к. девайс может питаться от АКБ 4. От wifi требуется работа только в режиме клиента Спасибо!
×
×
  • Создать...