Jump to content

    

__inline__

Участник
  • Content Count

    725
  • Joined

  • Last visited

Everything posted by __inline__


  1. Отдам печатные платы, расчитанные на TMS320C6745 DSP, плата 4 слоя, есть возможность поставить 16-битную SDRAM. Необходимый обвес также спроектирован. Отошлю почтой. Стоимость платы 400 рублей (кому кажется цена малой - приветствуется больше! :-) Принципиальная схема отладочной платы: SDK, исходники работы с C6745: https://vrtp.ru/index.php?showtopic=30775 Приветствуется заказ плат более 1 шт. Рассылка по России за Ваш счёт. Пишите в личку.
  2. Никому теперь ничего платить не надо. Истёк патент на MP3 и его отдали в свободное плавание... К тому же в VS1053, 1063 есть свободный OGG Vorbis
  3. Доброе время суток и с наступившими праздниками! Есть проект, на C/C++. Часть модулей программы компилируется очень долго: 2 - 10 минут. При этом оптимизатор съедает over 1 ГБ оперативной памяти компа. Причём, если будет открыт браузер интернета, то весь CCS может упасть - втихоря закрывается и всё. Разбил код на модули чтоб компилировать отдельно. Помогло, но не сильно. Есть несколько жирных классов с их методами - на них и затормаживается компиляция. Какие есть пути решения ускорить компиляцию без ущерба оптимизации? Стоит максимальная оптимизация: -O3, speed=5. Замечено, что компиляция именно C++ медленная, чё они(из TI) там натворили ? Связано ли это с тем что у меня всего 4 ГБ оперативы и 2 ядра по 3 ГГц? (по нынешним меркам - старьё) и с Win7 ?
  4. Не намного, чтобы с 8.3.5 слезть на 8.0.4. Под DSP скомпилянная программа такого рода: 1) Декодирование аудио, пожатого кодеком CELT - 48 кбит/c через 1 канал McASP 2) Отрисовка графики, её поворот в видеобуфере на 90 градусов. Буфер 400x240 пикселей 16 бит 3) Перенос буфера в LCD с VSYNC с помощью PRU #2 4) Опрос кнопок PRU #1 5) Считывание файлов с SD карты в High Speed Mode через 1-битный SPI 6) Распаковка сжатых данных ZLIB 7) Поддержка файлов FatFs 8) Расчёт физики (столкновения объектов, взаимодействие с твёрдым телом) с помощью физ-движка на вещественной арифметике 9) Микширование на 8 каналов звуков (WAV PCM) + 1 канал музыка (декод CELT пункт 1) В Linux я работаю крайне редко, при условии, если линуксоеды просят что-нибудь портировать на эту Ось ))
  5. 64 разряда Да! ))) кое-как себя убедил на Win7 перейти, к сожалению на WinXP было более удобнее. Скачал 8.04 и 8.2.8. Мне показалось, что проект собирается быстрее. C++ 03 Mode хватило. Правда, компилятор ругнулся на _nassert'ы (пришлось задефайнить их в ничто) и не нашёл функцию memset (пришлось <string.h> явно подрубить в сорец). Скорость работы программы(скомпилянной для DSP) во всех 4-х версиях (8.0.4 , 8.2.8, 8.3.3 и 8.3.5 ) остаётся одинаковой!
  6. Я хотел спуститься до 7.x.x, но не вышло: "Embeded C++ does not support templates". А у меня куча темплейтов. И замашки в стиле C99: переменные внутри цикла и в самом цикле, массивы переменной длины (которые локальные и генерятся в стеке и высвобождаются при выходе из функций). Пробовал 8.3.3 - всё те же тормоза. Но начиная с этой версии идёт поддержка синтаксиса C99, а он мне как воздух нужен, так как сорцы перелопачивать придётся очень долго под C89. Надо будет попробовать качнуть v. 8.2.x о которой вы пишите. P.S. Даже сраный Keil ARM CC (v.4 старая) собирает быстрее.
  7. С 8.3.3 было также долго. И не CCS поедает память, а c6x Optimizer - он периодически выскакивает - делает своё дело и закрывается. Тот же код под MinGW и Visual Studio 2010 компилируется несколько секунд.
  8. Добрый день! Выставил несколько отладочных плат и китов. Постарался сгруппировать. Обращаю внимание на: 1) Цена. Не догма! Предлагайте свои варианты цен с ссылкой на магазин, где нашли дешевле. Уступлю. 2) Внимательно смотрите - "новый" или "б/у". Если я пишу "новый", то это значит ни разу не использовал, питание не подавалось. Если я пишу "Б/У", то это значит ранее питание подавалось. 3) Заказы пишите в личку. Если я пишу, что товар забронирован за вами, значит остальным я пишу, что он забронирован за другим покупателем. Сроки оплаты оговариваются индивидуально в личке. Если вы поистечению срока не оплатили товар, то по истечению договоренного с вами срока, товар автоматически становится доступным для покупки остальными претендентами (о чём будет сообщено в личке). 4) Предоплата: стоимость товара + стоимость доставки. Доставка - обычная почта России (простая бандероль или бандероль 1го класса). Или экспресс-доставка. Договариваемся в личку индивидуально - вариант доставки выбираете сами. После получения средств, товар готовится к отправке и отправляется на указанный адрес. 5) Доставка: только по России. За рубеж НЕ высылаю. 6) Минимальный заказ : 500 рублей + стоимость доставки По всем вопросам пишите в личку или на мылo : repstosw2018 [СОБAKA] g m a i l . c o m Модуль TFT LCD 2.8 дюйма, совместим с Arduino. Состояние товара: НОВЫЙ В наличии: 2 штуки. Желаемая цена: 500 рублей. Характеристики: Диагональ: 2.8 дюйма Разрешение: 320x240 пикселей Тачскрин: резистивный (карандаш для нажатия прилагается) Контроллер дисплея: ILI9341 Интерфейс дисплея: параллельный 16 бит (поддержка интерфейса шины 6800/8080) Питание: 3.3 или 5V. Дополнительно: слот SD/MMC карты через SPI Наличие: контроллера тачскрина + LDO на 3.3V. Товар новый, на дисплее пленка для защиты. Брал 3 таких модуля, один пустил в дело - работает. Для продажи: в наличии 2 штуки. Отладочная плата: STM32F4DISCOVERY Cостояние: "Б/У". В наличии: 2 штуки. Особенности: - на первой плате выпаян акселерометр - на второй плате выпаяны 2 светодиода (в центре) Желаемая цена: 1500 рублей. Характеристики: 32-битный ARM-контроллер STM32F407VGT6 семейства Cortex-M4 Flash память: 1 МB ОЗУ (RAM): 196 КB Возможность отладки: JTAG и SWD Встроенный отладчик и программатор ST-Link/V2. Питание 5 или 3.3V (и от USB). Отладочная плaта "Minimalistic" ATmega128. Состояние товара: "Б/У". Желаемая цена: 300 рублей Отладочная плaта - минимальная система, с минимальным набором компонентов. На плате выведены порты микроконтроллера, разъемы подключения программатора, отладчика, дополнительного кварцевого резонатора и питания. На плате есть кнопка RESET, светодиод индикатора питания и выключатель питания. Напряжение питания 5 В. Отладочная плата SmartMP3 на VS1011Е. Состояние: "Б/У" Желаемая цена: 1500 рублей Декодирует MPEG 1.0 и 2.0 layer III (MP3: CBR, VBR, ABR) Опционально декодирует MPEG I и II (MP1, MP2) Декодирует WAV (PCM + IMA ADPCM) Гнездо для карт MMC / SD на плате SPI интерфейс управления и передачи данных Встроенный динамик, плюс клеммы для внешнего динамика или наушников Работает как с системами 3.3V, так и с 5V Модуль трансивера на м/cх. CC1101 (Chipcon, Ti) Состояние: "Б/У" Желаемая цена: 200 рублей В наличии : 2 штуки Частоты - UHF, "430 МГц". Выходная мощность - 10 мВт (максимум, регулируется программно) Всего: 2 штуки.
  9. Отладочные платы, киты

    Обмен возможен. Пишите в почту или личку.
  10. Подскажите кодек для сжатия музыки, можно с потерями. Требования к кодеку: 1) Должен быть опенсорсным и написан на C/C++ (кроссплатформенность и следование ANSI C приветствуются) 2) Декодирование занимает не более 80 миллиоонов операций в секунду 3) Поддерживается фиксированная длина одного фрейма (пакета) сжатия 4) Регулируемая длина в байтах одного фрейма 5) Можно на floating point 6) Требования к декодированию с любого места - отсутствуют, мне нужно последовательно декодировать Всякие MP3 не прокатывают ввиду их относительной жручести и кривого размера одного фрейма. ADPCM не подходит из-за низкого коэффициента сжатия 4:1
  11. Переписал mathops.h на интрисинки C6745 и включил быструю аппроксимацию в config.h - скорость декодирования выросла : теперь фрейм разжимается 0,56 мс. Но можно было и не оптимизировать, а включить FIXED_POINT в config.h и пересобрать. Вариант FIXED POINT на 5% быстрее оптимизированного FLOATING POINT + FAST APPROX. Пробовал CELT 10 и 11 версии. 11-я версия пошла фтопку, так как кодек отказался работать на моём формате. А вот 10-я версия работает, хотя пакеты несовместимы с 9-й. Оставил 10-ю версию. Всё что выше 10й - уже похерено Опусом.
  12. Проделал ряд экспериментов с кодеками на ПК и на доске с C6745. 1) Кодек MP2. На 32 кГц 48 кбит/c 1 канал - качество заметно хуже, чем у MP3 на тех же параметрах. Конкретно - сильно режет высокие частоты, звук как будто приглушён. 2) Кодек Opus. Ребята из Xiph.org явно перегнули палку с ним. Нет никакого кодека Opus на самом деле. Есть два разных кодека: для речи- SILK, для музыки -CELT. То, что называется Opus'ом - это некая предварительная прослойка, которая анализирует фрейм и параметры: если фрейм речевой - отсылает на SILK, если музыкальный - то отсылка на CELT. При этом, конечно, сжирается некий вычислительный процент на такой анализ. А у меня чисто музыка. Поэтому было решено перейти к кодеку под пунктом 3) ниже: 3) Кодек CELT. Конкретно собрал версию 0.9.0. Хватает за глаза! Читаем описание и видим: поддержка семплрейта от 32 (!!!) до 96 кГц - то что мне нужно!!! А в Opus 32 кГц запретили. Далее - размер фрейма : от 64 до 512 семплов. Нет привязки к тупым миллисекундам как в Opus ! Итоговый битрейт считается как : BitRate = FrequencySample/FrameSize*CompressedFrame*8 BitRate -битрейт бит/c FrequencySample - частота дискретизации Гц FrameSize - размер фрейма (исходного) в семплах (1 семпл = 2 байта) CompressedFrame - размер фрейма (сжатого) в байтах По формуле выше определяется размер сжатого фрейма, при заданном целевом битрейте (выходном). Результаты ошеломляющие - без всяких спец-оптимизаций и интринсиков удалось декодировать на лету фреймы всего 0,96 мс при таких параметрах: 1 канал, 48 кбит/c, 32 кГц, размер разжатого фрейма 512 семплов. Выходит в Opus жестко ограничили возможности CELT'а и притормозили его! А вот если переписать mathops на интринсики C6745, думаю можно ещё больше ускорить работу кодека. И по качеству CELT сравним с MP3 и превосходит MP2 на одинаковых параметрах. Задача выполнена. Кодек CELT с исходниками: http://www.celt-codec.org/downloads/ Моя байда с проверкой кодека на ПК:
  13. TI в C6745 сделала SDIO аж 8-битным (что для e-MMC очень прекрасно), но эти лапки к сожалению также сидят на EMIFA, а там дисплей у меня. Делать мультиплексор и разделять во времени работу с LCD и картой - не вариант. И перекидывать ноги на разные функции как сделано в STM32 нет возможности. Но я приобрёл больше с С6745 , чем потерял на STM32. )) Правда есть возможность сделать ногодрыг на PRU или софтово, но поезд ушел - железка в релизе: SD карта там через SPI. Я тут копаю кодек CELT - это бомба - качество лучше, чем у MP3 на таких параметрах 32 кГц 48 кбит/c 1 канал. Для музыки в видео-играх идеально, даже в наушниках хорошо звучит. И сжатие лучше в 2-4 раза, чем у 4-битного ADPCM при том же качестве звука (чисто субъективная оценка). А это меньше данных грузить с SD-карты - быстрее загрузка. Декодирование на лету - по фреймам 512 семплов: как раз 16 мс(это период следования прерываний McASP ) выходит на 48 кбит/c - чуть больше 60 FPS с VSYNC (сам декодер разжимает фрейм всего 0,96 мс) Мои эксперименты с кодеком CELT:
  14. STM32H743 MDMA

    Использую H743 на отладочной плате Nucleo. Работал с DMA, DMA2D - всё чудесно и превосходно: с AXI RAM отправляю буфер в LCD-дисплей по шине FMC 8-бит (дисплей со своим контроллером и видеопамятью). Но не хватает опции перестановки байтов, потому что LCD требует передавать старший, затем младший байт. Пока использую REV16 per pixel. Хочу избавиться от REV16, применив MDMA в котором можно включить перестановку байтов (слов и полу-слов). Проблема: MDMA не работает: инит сделал Кубом , вызов через HAL. Код стандартный и нет нужды его приводить здесь. Буфер кадра в AXI SRAM, дисплей на FMC, кеширование портов дисплея отключено (адреса 0xC0000000...0xC0010000). Дисплей чёрный - ничего не отрисовывает. Почему? Волнует специфика - может ли MDMA отрабатывать транзакции AXI SRAM => FMC ? Читал мануал, прямого ответа там на мой вопрос нет.
  15. STM32H743 MDMA

    Одна DMA-транзакция: не более 65535 байт за 1 раз. Пришлось бить на 3 равные части: LCD_H*LCD_W)<<1)/3 ((400*240 пикспелей) *2 байт) /3 = 64000 байт. По три раза(последний аргумент).
  16. Соглашусь, что форум отличный! Главное, чтобы модераторы следили за порядком и не сдавали позиции! Это один из немногих форумов, который очень полезный, благодаря очень компетентным участникам! И если модераторы будут пресекать соревнования в стиле "чей пукан более стальной", то этот форум останется полезным и никто не разбежится! Долой троллей с форумов! Ну и благодарность участникам форума, кто мне лично помог! И с наступающим Новым годом!
  17. Спасибо! Теперь я могу быть спокойным и искать другие пути решения.
  18. STM32H743 MDMA

    Приходилось использовать MDMA по причине того, что он может менять последовательность байт при передаче, что очень важно при пересылке буфера в LCD (иначе пришлосб бы менять байты вручную через _rev16). Всё исправно работает, ниже код. Правда, пришлось повозиться с настройками. static void MX_MDMA_Init(void) { /* MDMA controller clock enable */ __HAL_RCC_MDMA_CLK_ENABLE(); /* Local variables */ /* Configure MDMA channel MDMA_Channel7 */ /* Configure MDMA request hmdma_mdma_channel7_sw_0 on MDMA_Channel7 */ hmdma_mdma_channel7_sw_0.Instance = MDMA_Channel7; hmdma_mdma_channel7_sw_0.Init.Request = MDMA_REQUEST_SW; hmdma_mdma_channel7_sw_0.Init.TransferTriggerMode = MDMA_FULL_TRANSFER; hmdma_mdma_channel7_sw_0.Init.Priority = MDMA_PRIORITY_LOW; hmdma_mdma_channel7_sw_0.Init.Endianness = MDMA_LITTLE_BYTE_ENDIANNESS_EXCHANGE; //Меняем местами байты (для LCD) hmdma_mdma_channel7_sw_0.Init.SourceInc = MDMA_SRC_INC_HALFWORD; hmdma_mdma_channel7_sw_0.Init.DestinationInc = MDMA_DEST_INC_DISABLE; hmdma_mdma_channel7_sw_0.Init.SourceDataSize = MDMA_SRC_DATASIZE_HALFWORD; hmdma_mdma_channel7_sw_0.Init.DestDataSize = MDMA_DEST_DATASIZE_HALFWORD; hmdma_mdma_channel7_sw_0.Init.DataAlignment = MDMA_DATAALIGN_PACKENABLE; hmdma_mdma_channel7_sw_0.Init.BufferTransferLength = 2; //1 для BYTE, 2 для HALFWORD, 4 для WORD hmdma_mdma_channel7_sw_0.Init.SourceBurst = MDMA_SOURCE_BURST_SINGLE; hmdma_mdma_channel7_sw_0.Init.DestBurst = MDMA_DEST_BURST_SINGLE; hmdma_mdma_channel7_sw_0.Init.SourceBlockAddressOffset = 0; hmdma_mdma_channel7_sw_0.Init.DestBlockAddressOffset = 0; if (HAL_MDMA_Init(&hmdma_mdma_channel7_sw_0) != HAL_OK) { Error_Handler(); } } void SaI2xTransfer(void) { HAL_MDMA_PollForTransfer(&hmdma_mdma_channel7_sw_0,HAL_MDMA_FULL_TRANSFER,100); SaI2x((u8*)&BufferAndBorder[(1+160+2)+1],1+160+2,FilterBuffer,LCD_W<<1,160,120); SCB_CleanDCache(); HAL_MDMA_Start(&hmdma_mdma_channel7_sw_0,(u32)FilterBuffer,(u32)&LCD_DAT32,((LCD_H*LCD_W)<<1)/3,3); }
  19. Voice activity detection (VAD)

    "Любой каприз за ваши деньги" (c)
  20. Voice activity detection (VAD)

    AlexandrY, вы как-будто на другой планете живёте! ))) То, что для всех VAD, для вас - не VAD, а непонять что. Читаем википедию и видим: https://ru.wikipedia.org/wiki/Speex Вопросы? Меня волнует больше другой вопрос: сколько мозговых извилин у среднего индивидуума понадобится для этого, чтобы разработать надёжно работающее устройство по этому принципу? И сколько таких индивидуумов на планете существует?
  21. "Потому что гладиолус! ..." (c) Да тут всё понятно. Сделать это можно, но через большую ... (так, а где тут смайлик с поворачивающейся жопой? :) раньше был такой!)
  22. Так карты давно уже отформатированы на размер кластера 32 кБ программой SDFormatter! Но FatFs от этого быстрее не заработала. Потому что внутри неё идёт чтение секторов архаичными порциями по 512 байт даже в мультисекторной командой: ждём токена, выкачиваем 512 байт, 2 байта CRC, и так по кругу. Да и вообще, FatFS не учитывает размер кластера. Только сектор - минимальный и максимальный (обычно они равны) и интерфейс SDIO позволяет читать за один запрос целым блоком по 4, 8, 16 и 32 КБайта. При этом резко повышается скорость чтения, т.к. "накладных расходов" гораздо меньше. Не видал такого! В STM-ном коде от кало-куба идёт общение карты через 4-битный SDIO, но чтение порциями в мультисекторных командах там по-прежнему - по 512 байт Нет такого там чтобы сделать чтение 4 кбайт через SPI, везде идут SPI-чтения по 512 байт. Тем не менее, мультисекторное чтение даёт и в этом случае выигрыш в разы по сравнению с чтением по 1 сектору. Но речь шла о том как заставить карту выдать к примеру 4 кБайт данных, с минимум опросом одного токена + 2 байта ЦРЦ
  23. Для того чтобы другие системы засинхронизировать от прерывания по опустошению звукового буфера с заданным интервалом. Нужен определённый размер буфера или кратный целому числу от минимального размера. )) Нужен буфер на 480 или 512 семплов.