Jump to content

    

__inline__

Участник
  • Content Count

    376
  • Joined

  • Last visited

Community Reputation

0 Обычный

About __inline__

  • Rank
    Местный

Recent Profile Visitors

726 profile views
  1. SEGA, пришлось использовать PRUSS для отрисовки. Видео - сравнение двух режимов : без PRUSS и с ним: https://www.youtube.com/watch?v=O1g8AbYWrzE Здесь показана максимальная производительность всей системы (CPU+PRUSS), убрана кадровая синхронизация. Чисто для наглядности https://www.youtube.com/watch?v=1JhDl9Cbn9I Видео работы эмулятора SEGA Megadrive: https://www.youtube.com/watch?v=NY6x8q0-Xjo
  2. Довёл до ума - джойстик теперь на PRU0. Перенес один из эмуляторов: https://www.youtube.com/watch?v=kTSq8R1Dnzk
  3. Отдам печатные платы, расчитанные на TMS320C6745 DSP, плата 4 слоя, есть возможность поставить 16-битную SDRAM. Необходимый обвес также спроектирован. Отошлю почтой. Стоимость платы 400 рублей (кому кажется цена малой - приветствуется больше! :-) Принципиальная схема отладочной платы: SDK, исходники работы с C6745: https://vrtp.ru/index.php?showtopic=30775 Приветствуется заказ плат более 1 шт. Рассылка по России за Ваш счёт. Пишите в личку.
  4. Загрузчик в действии: https://www.youtube.com/watch?v=51LJgZygHt8
  5. Решил проблему, поделив все секции на Read-Only и Read-Write. Ввёл границу раздела памяти (между RO и RW). Скрипт для линкера такой: #define SDRAM_BASE 0xC0000000 #define SDRAM_SIZE 0x02000000 // 32 MB #define RO_SIZE 0x0004B000 //300 kB -c -stack 0x00008000 //32 kB -heap 0x01E00000 //30 MB MEMORY { RO o = SDRAM_BASE l = RO_SIZE RW o = SDRAM_BASE+RO_SIZE l = SDRAM_SIZE-RO_SIZE } SECTIONS { .text:_c_int00* > SDRAM_BASE .text > RO .const > RO .switch > RO .cinit > RO .rodata > RO .sysmem > RW .far > RW .stack > RW .bss > RW .neardata > RW .fardata > RW } Тут только те секции, что использую. Остальные выкинул за ненадобностью. В случае Страуструпа (C++) надо добавить другие секции. Проверил - всё пашет как надо! Обширный попкорн теперь не создаётся (файл не раздувается)!
  6. Проблема из-за вот этого: .text:_c_int00* > 0xC0000000 Если убрать, то бинарник становится маленьким, но entry point плавает. И в map-файле почему-то куча со стеком на младших адресах, ниже идёт код, данные...... Как можно принудительно заставить линковщик засовывать секции .stack и .sysmem в самый конец? (по старшим адресам) Пока ничего кроме как указать стартовый адрес стека, вычислив его дефайнами не приходит в голову.
  7. Я взял тот файл для линковщика, который мне CCS для C6745 предложил - называется он C6745.cmd. Это его содержимое. Хотите сказать что он неверный? Моя отсебятина там только - загон функции c_int00 в начало SDRAM. Атрибуты это что ? Можете выделить жирным в ваших скриптах линковщика? NOINIT - оно? PS: Ещё можно убедиться по map-файлу, что нет каких-то ещё выходных секций в несмежных с EMIFBSDRAM областях памяти. Может какие-то регистры периферии при старте прописываются. Тогда дырка между ними и EMIFBSDRAM будет заполнена. а вот это уже интересно! Я тоже сам писал. И что? нафига мне AIS в самописанном загрузчике?
  8. Всё хорошо, до тех пор пока программу пишите Вы сами. Приключения начинаются, когда занимаешься портированием чужих программ. К примеру декодер H264 - вся работа построена на куче, ибо туча буферов постоянно выделяются-высвобождаются туда-сюда, поверьте если оно б ненужно было, то никто кучу и работу с ней не изобретал,....... Мой файл для линковщика - всё как обычно: Так я ж сам загрузчик пишу, кладу файл бинарника сразу в SDRAM. Для чего мне заморачиваться с AIS? Файл разрастается на 2 этапе: objcopy -I elf32-little -O binary app_elf.bin app.bin .text:_c_int00* > 0xC0000000 Этим мы принудительно заставляем точку входа в программу быть с адреса начала SDRAM. HINT: И попутно эта функция ещё сбивает режим округления, так что только в main() его выставлять
  9. Написал свой загрузчик для C6745, который с SD карты по SPI загружает в SDRAM программы. Всё блестяще работает на всех моих примерах. Есть одна проблема - при указании в опциях линкера (CCS v.6, TI Compiler 8.x.x) большого размера кучи (heap) бинарник вырастает до огромных размеров - идёт резервация памяти. Так как куча допускается непроинициализированной, как сделать так, чтобы при построении бинарника он не включал кучу? Из OUT делаю в BIN двумя утилитами (узнал в e2e): делаем эльфа 1) strip6x.exe -p -o app_elf.bin app.out делаем бинарник 2) objcopy -I elf32-little -O binary app_elf.bin app.bin Кто что подскажет?
  10. Фины же нордическая (белая) раса, чёрной она быть не может ) BlackFin - если что "Чёрный Плавник"... У AD всё с рыбами связано - вон Tiger Shark'и тоже - акулы.... А вообще смотрю я на STM32 и понимаю, что то чему рукоплещут миллионы хомячков по всему миру, это уже "дела давно минувших дней"... - многомерные DMA, память-память, видео-ускорители, наличие плавающей точки... - всё это уже давно было со времен DSP.
  11. А не пофиг ли, если для хобби (насколько я понял из этой темы "про вечное")? sitara туда же Честно говоря, мне непонятна озабоченность техасцев индусской стилистикой - в техподдержке у них почти все индусы. Вот докатились, что имена процессорам тоже дают индусские. У меня при слове "sitara" вот такая картинка в голове сразу рисуется: Эдакий, гуру микроконтроллеров, освоивший ситары )))
  12. У меня была аналогичная проблема с I2S на McASP в C6745. Нужно было избавиться от 32-битных пересылок - просто оттюнинговал оффсет в EDMA3 на значение =2 вместо 4, в итоге DMA стал отправлять в порт McASP 16-битные данные. Затем я избавился от второго канала и превратил I2S в I1S (просто надо MONO было, а не Stereo) - задал только один тайм-слот. Теперь память на второй канал не расходуется и он молчит (что и требовалось). EDMA3 настроил так: первое измерение ACNT=2 или 4 (размер семпла в байтах), второе измерение BCNT=64 (максимальный размер Audio FIFO), и наконец третье измерение = число кусков Audio FIFO в семплах. Качает до 16 МБ памяти в звук разом! В прерывании по окончанию DMA пересылки перезагружаю дескрипторы EDMA (PaRAM). Всё! Такого замечательного DMA я ещё нигде не встречал! АRМ-ы со своими 64K-DMA давятся в сторонке! =) Да, пришлось потрахаться с мануалами, порой даже на другие процессоры этого семейства, читать e2e, форумы, пережевывать китайские исходники, и.т.п. За 4 дня разобрался
  13. Ещё есть Мне не для аудиофилии, одного канала хватит за глаза, начиная с 12 бит (использую 16). Если это Cortex-A* , то вменяемой она в принципе быть не может! ))) Уже проходили! Кто-бы Cortex-M7 сделал бы на пару гигагерц с 64-разрядной шинами данных-адреса? Я о том же! Есть ПК для этого. Молодежи этого не понять - одни пыхтоны с линуксами... Sport это ж SPI, нет? В C6745 SPI всего два. А McASP - тоже два. В McASP - туча каналов! Ниже подробно.
  14. Кстати, вот надумалось применение для PRUSS - обработка кнопок джойстика от SEGA MegaDrive (Genesis). Для 6-кнопочного варианта важно выдержать интервалы между посылками, иначе джойстику сорвёт крышу и часть кнопок будет считываться неправильно. В свое время на ARM9 и BlackFin делал обработчик прерывания по таймеру и опрашивал кнопки. Но... от задержек я не ушёл! А с PRUSS эта задача становится лёгкой и не мешает основному CPU работать и отвлекаться на задержки. Код для BF532,533 ниже: Использование джойстика: https://eax.me/arduino-sega-controller/ Так как он КМОП, то и от напряжения 3.3V он тоже работает (проверено не раз)