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

    

_pv

Свой
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

Информация о _pv

  • Звание
    Гуру

Контакты

  • Сайт
    http://
  • ICQ
    199070155

Информация

  • Город
    Nsk

Посетители профиля

9 462 просмотра профиля
  1. СИ сам по себе вроде бы ничего не знает про арифметику с насыщением, так что правильный ответ - ассемблерными вставками / интринсиками. а ещё если и целевая платформа не умеет в операции с насыщением, ну тогда проверяйте руками переполнение и если да, то меняйте результат на 0x7fffffff.
  2. а ускоритель быстрее считает? тут https://www.analog.com/en/design-center/landing-pages/001/sharc-benchmarks.html для 2146х, который на 21489 больше похож, в 7 раз медленнее (запятую не туда поставили?), а для 58х в 4 раза быстрее. правда в любом случае делает это сам почти независимо от процессора.
  3. ну в даташите-то 1024 Point Complex FFT (Radix 4, with Reversal) 23 μs - это с акселератором поди? для bf70x видел цифры ~20000 тактов для 1024FFT, если поделить на те же 400МГц будет 50 мкс. если конечно забыть пока про типы данных
  4. ну 2.7GFlops это некая маркетинговая циферка, не совсем честная, на fir/fft по тактам на отсчёт блэкфин7 от шарка (если забыть пока про плавучку) раза в два вроде только отличается, как раз за счёт аппаратных ускорителей, и по цене в те же два раза.
  5. для поиграться со звуком у аналогов ещё есть EVAL-BF706M-EZLITE за 70$, но с отладчиком и кодеком, целочисленные, с мегабайтом памяти. имхо не особо дороже выйдет чем собирать такую плату самому.
  6. да там и новые шарки 57х тоже неплохо выглядят. только вот 2гфлопа для, пусть даже 96кГц, звука это по 20000 флопов на отсчёт, это что такое надо со звуком делать чтобы столько понадобилось? ну за исключением очень уж многоканальности.
  7. Можно, только загрузки через uart нету, так что загружаться всё равно только через spi. В официальном ките вроде M25P16 стоит, но должны аппноуты быть, или в hardware reference описаны требования к последовательной памяти для загрузки. он должен быть достаточно всеяден. А можно, пожалуй, и вообще без флэшки, какой-нибудь FT2[2]32H или даже альтеровский USB blaster (там протокол даже проще чем MPSSE) приспособить для загрузки в SPI-slave.
  8. актуальность поди примерно такая же тут: http://mmm.su/, но даже там ещё вроде не до конца всё прошло :) так что дерзайте.
  9. ну не совсем, там в макросах прячется условный goto, чтобы внутрь бесконечного цикла в нужное место при очередном вызове сразу запрыгивать, делая вид что просто продолжили с того места откуда в прошлый раз return был, тут же надо просто один и тот же кусок кода оформленный в "локальную" функцию несколько раз позвать, но да, похоже наверное.
  10. имхо от именно битовой карты регистров толку не особого нет. только место занимает. сделайте определение отдельных полей, причем зачем там вообще JSON?, их по идее из хедера просто брать надо, чтоб два раза не описывать регистры. #define REG_MA 0x01 #define MA_addr REG_MA, 1, 1 //reg address, size_bits, offset #define REG_TUNER 0x1F #define ptunerbits_videobuf REG_TUNER, 5, 5 и потом из этого получится куча полей ввода/чекбоксов (для 1битных значений), которую при желании можно группировать по регистрам как на картинке Arlleex.
  11. я же предположил влажность, а не закварцованность вспаханной почвы, у воды там тоже какие-то пики есть, хотя может и не кварц конечно, а что-нибудь водорастворимое, что у не вспаханной почвы со временем вымывается с поверхности.
  12. я старался. но с другой стороны вся эта красота будет генерироваться автоматически скриптами, и её можно в макросы убрать. и в результате наверное можно добиться чего-нибудь вроде void Func(){ DECLARE_LOCAL_FUNC (Test){ ... } ... CALL(Test); ... }
  13. может влажность почвы - разное отражение. посмотрите спектры поглощения для разных материалов в этих диапазонах.
  14. ну тогда могу предложить ещё более замечательные костыли: вставить код внутренней функции один раз как есть, а вызовы этой функции заменить на метки и goto, и прыгать туда сюда, jmp, call, какая разница :), ну переменную ещё одну завести придётся, счётчик вызовов и switch в конце функции добавить, чтобы возвращаться из этой "локальной" функции туда откуда вызывали. ну и локальные переменные под аргументы и возвращаемое значение. void Func(int N, int M, double X[N][M]){ int i, j; int Test_call_cnt = 0; goto Test_end; :Test { int i, j; for(i=0; i<N; i++) for(j=0; j<M; j++) X[i][j]=(double)(i*1000+j); Test_call_cnt += 1; switch (Test_call_cnt){ case 1 : goto Test_call_1; case 2 : goto Test_call_2; case 3 : goto Test_call_3; } } :Test_end goto Test; :Test_call_1 for(i=0; i<N; i++) { double s=0; for(j=0; j<M; j++) s+=X[i][j]*X[i][j]; s=(s>0.)?1./sqrt(s):0.; for(j=0; j<M; j++) X[i][j]*=s; } goto Test; :Test_call_2 return; } а ещё в макросы всю эту красоту обернуть :) чтобы не так страшно было.
  15. отладочные платы texas instruments

    от запихивания аккуратных АЦП в корпус к МК лучше они работать не начинают, отдельный ad7195 шумит в несколько раз меньше.