Jump to content

    

__inline__

Участник
  • Content Count

    762
  • Joined

  • Last visited

Everything posted by __inline__


  1. Если доки действительно хорошие, то нужное осиливается за 1-2 месяца. Может и раньше. Voodoo2, Voodoo3 от 3DFX расковырял за недею с небольшим. ну и C6745 за пару месяцев чтоб написать свой SDK. Это при условии что ковырять только то что нужно!
  2. Портировал Gradius на EMU Pocket. Учитывая её скромные ресурсы: Flash память 2 МБ, оперативная память 1 МБ (фрагментированная на куски). Мне удалось вместить игру в такие объёмы! Правда, музыка играет с SD карты. Без SD карты будут только звуки ))) Для сравнения: 1) Железо BlackPrism: 32-битный DSP TMS320C6745, частота ядра 456 МГц, два встроенных RISC-сопроцессора по 228 МГц каждый, кеш L1 по 32 кБ на код и данные, кеш L2 на 256 кБ. Внешняя память : 32 МБ. Планируется переход на 64 МБ. Статус: макет. Планируется релиз. 2) Железо EMU Pocket: 32-битный ARM STM32H743, частота ядра 400 МГц, только кеш L1 по 16 кБ для кода и данных. Память Flash (ROM) 2 МБ, RAM - суммарный объем 1 МБ (нарезана кусками - 512, 256,... кБ в разных адресах). Статус: завершён Печатные платы для игровой приставки EMU Pocket также есть у меня в наличии. Отдам недорого. Пишите в личку. Level1,2 https://www.youtube.com/watch?v=N5bmxP7dU98 Level3,4 https://www.youtube.com/watch?v=01S6V4yWO2A Level4 Boss https://www.youtube.com/watch?v=mmk-lSZE7-k END: https://www.youtube.com/watch?v=8lZBUQcklgk
  3. ili9341 и Tearing effect

    Данный дисплей конечно же, дерьмового качества, но для обкатки тестов вполне годится. Тоже столкнулся с необходимостью синхронизировать вывод кадра и отрисовку, чтоб не резало картинку. Итак, данный дисплей имеет ножку 21 (нумерация со стороны шлейфа дисплея), прийдётся курочить абдурино-шилд чтоб до ней добраться. Эта ножка именуется "TE". Так вот, можно расслабиться! ))) Команда 0x35, которая включает эту ножку - НЕ работает! ))) В других дисплеях - эта же команда работает и выдаёт на ножку TE честный VSYNC. Можно опрашивать бит порта или завести на прерывание. Но только не в этом дисплее. Поэтому.... было найдено решение - опрос номера отображаемой линии (команда 0x45). У меня кадр рисуется с 32 линии и по высоте занимает 256 линий. Значит, нам надо давать команду на отрисовку, когда луч дошел до 288 линии (256+32): void VBlank(void) //тупо ждёт пока луч не достигнет 288-й строки { u16 v=0; while(v!=(32+256)) { LCD_COM8=0x45; //команда Get_Scanline v=LCD_RD_DAT8; *(u8*)(((u32)&v)+1)=LCD_RD_DAT8&0x03; *(u8*)( (u32)&v )=LCD_RD_DAT8; } LCD_COM8=0x2C; //команда Write VRAM } Ещё важно упомянуть, что в данном дисплее луч идет по короткой стороне дисплея - 0...239, а не 0..319, так как дисплей расчитан для портретной ориентации. И независимо от того как настроено отображение видеопамяти (Portrait, landscape) - развертка будет идти в Portrait -стиле! А это значит что во избежание тиринга, нам нужно отрисовывать ЖЕЛАТЕЛЬНО также - слева направо 0...239 (по направлению короткой стороны) и сверху-вниз 0..319 (длинная сторона). Тогда тиринга не будет + изображение будет двигаться плавно и без подёргиваний. Ну и конечно же, важно настроить дирекцию кадра и луча. Следует избегать случаев когда вертикальное направление луча не совпадает с отрисовкой (бит 4 регистра 0x36). Ориентация задана так: //Memory Access Control TFT_WriteCommand(0x36); TFT_WriteData(0x48); //orientation: 0x28 0x48 0x88 0xE8 + 0x10 vertical scan direction Ну и до кучи - настройка частоты обновления кадров в дисплее: //Frame Rate Control (In Normal Mode/Full Colors) TFT_WriteCommand(0xB1); TFT_WriteData(0x00); TFT_WriteData(0x1F /*0x1B*/); //61 Hz 70 Hz
  4. Здравствуйте. Проект в Keil ARM MDK (5 версия), контроллер STM32H743. Проект написан на C++. Если применить std::<vector>, то при упоминании в любом месте в коде метода .push_back() программа вообще не стартует ! Причем, до push_back вообще не доползает - просто не стартует и всё. Если убрать Push_back, то работает. Стек и кучу выставил по 32 кБ, не помогает. Код: struct LevelObjectDesc { unsigned char type; unsigned char offsetPacked; bool initialized; }; std::vector<LevelObjectDesc> levelObjectsList; //... LevelObjectDesc dsc; levelObjectsList.push_back(dsc); //!!! при написании этой строки программа вообще не стартует, хотя код не выполняется //.... Есть мысли, что при упоминании методов вектора компилятор C++ перед main() что-то вставляет что не даёт программе идти дальше. Отладчика у меня нет. Тот же код, написанный на TI CCS v6 под TMS320C6745 идёт без проблем. В чем может быть дело? Keil слабёхонький и не тянет <vector> ? Ещё проблема: если подключить <iostream> и описать неймспейс, то программа также не запускается: И код разбухает на 32 кБ. Читал что рантаймовские либы в C++ открывают звездёж по всяким cin, cout, файлы,,, ком-порты, которые в итоге завешивают контроллер ещё ДО того как пойдет в main() Что делать? Патчить хедеры - убить всё счто с cio / cout связано?
  5. Keil ARM + STM32 + C++ <vector> push_back вопрос

    ok! А то приходится разгадывать квесты по электронике с помощью метода Космической Сверх-Интуиции ))
  6. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Нашёл способ как заставить программу работать. Я исходил из того что при использовании STL векторов, списков в программе, компилятор вставляет код перед main(), который вместе с инитом делает ещё кучу лишних вещей с устройствами ввода-вывода (или потоками), которые генерируют исключения, а они необрабатываются, от того и повисают. Поэтому помог ключ: --exceptions С ним программа пошла. Вектора, списки - всё работает как надо. Удивляет тотальная безинициативность компании ARM и создателей Keil ARM MDK - этот вопрос на их ресурсах нигде не освещается... Ещё бы научиться им пользоваться ))) у меня со штатным дебагом как-то не заладилось - комп повисает и всё глючит
  7. Keil ARM + STM32 + C++ <vector> push_back вопрос

    И причём выбешивает ситуация того, что эта проблема игнорируется уже несколько лет. Вот ещё: https://wasm.in/threads/keil-std-vector.25008/ вот : https://community.arm.com/developer/tools-software/tools/f/keil-forum/38112/arm-using-stl-vectors И вместо ответов - одни отмазки. Так ничего и не работает .
  8. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Он у меня тоже есть. 6-й не компилит HAL: Drivers/HAL/Src/stm32h7xx_hal_dac_ex.c(256): error: unknown type name '__weak' __weak void HAL_DACEx_ConvCpltCallbackCh2(DAC_HandleTypeDef* hdac) Port/main.c(17): warning: In file included from... Port/video.inc(38): error: expected '(' after 'asm' __asm{REV16 x,x} Теперь весь код ради 6-й версии перелопачивать??
  9. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Нашёл: http://qaru.site/questions/6958806/pushback-causes-program-to-stop-before-entering-main Keil - безнадёжный огрызок раз так всё плохо, TI C/C++ 8.3.3 куда лучше оказался У кого ещё какие мысли? По поводу как побороть зависон из-за push_back() ?
  10. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Попробовал отключить FPU всеравно не идёт. Волшебная опция --force_new_nothrow тоже не помогает
  11. Keil ARM + STM32 + C++ <vector> push_back вопрос

    как может быть связан FPU с <vector >? FPU нужен в программе!
  12. Keil ARM + STM32 + C++ <vector> push_back вопрос

    Наверно Legacy
  13. Актуально. Проект крепчает: https://www.old-games.ru/forum/threads/gradius-iii-total-terror-igra-v-stile-8-16-bitnyx-igrovyx-pristavok.86169/
  14. Коллектив разработчиков в лице меня и ещё нескольких человек написали игру "Gradius III Total Terror" Подробнее об игре здесь: https://www.old-games.ru/forum/threads/gradius-iii-total-terror-igra-v-stile-8-16-bitnyx-igrovyx-pristavok.86169/ Сайт игры: http://gradius3.space Скачать игру: http://gradius3.space/download5.php (Windows, билд 24.06.2019) http://gradius3.space/download6.php (Linux, билд 30.06.2019) http://gradius3.space/download7.php (DOS, билд 14.07.2019) Игра Gradius III Total Terror в действии на игровой консоли BlackPrism: Видео с полным прохождением игры на BlackPrism: https://www.youtube.com/watch?v=v1qIOm6hs4Q
  15. Запустил PRU0 в TMS320C6745, по крайней мере останавливается и считывает счётчик инструкции. Компилятор ti-cgt-pru_2.3.1 - виснет, падла в этом месте - когда программный счётчик =5: #pragma DATA_ALIGN(PRU_CODE,4) const u8 PRU_CODE[0x1000]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x24, 0x80, 0x48, 0x00, 0x24, 0xe2, 0xe0, 0x04, 0x05, 0x8e, 0x81, 0xff, 0x2e, //5 => зависон 0xc3, 0x0d, 0x00, 0x23, 0xee, 0x01, 0x00, 0x24, 0xc3, 0x09, 0x00, 0x23, 0xc3, 0x0b, 0x00, 0x23, 0x00, 0x0a, 0x00, 0x21, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0xc3, 0x20, 0x00, 0x00, 0x00, 0x2a, //HALT 0x00, 0x0e, 0x00, 0x21, //Loop: goto Loop; Залез в MAP-файл, это подгаживает функция - _c_int00_noinit_noargs - до main() так и не доходит! Вот здесь виснет и не останавливается: 0x8e, 0x81, 0xff, 0x2e, //5 => зависон Сишный код самый простой что есть: void main(void) { __halt(); Loop: goto Loop; } Не выходит по останову - до Halt так и не добирается! Зато если сделать в самом начале оп-код halt: #pragma DATA_ALIGN(PRU_CODE,4) const u8 PRU_CODE[0x1000]= { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, //HALT То успешно останавливается и цикл в главной программе заканчивается: while(PRU0_CONTROL&(1<<15)) //if RUNSTATE=1 wait... Выходит компилятор C делает что-то недопустимое и он для ситар с бигл-бонами, но никак не для C6745 ??? PASM наше всё? Программный счетчик (там где в настоящий момент фетчится код) - смотрю в младших 16 битах регистра: PRU0_STATUS Вот тут ТП-Мелисса (других слов не нахожу) из TI так и не сумела объяснить причину зависона у аналогичного товарища: https://e2e.ti.com/support/processors/f/791/p/752634/2786060 Ну и до кучи привожу скрипт линковщика для PRU0: -cr /* LINK USING C CONVENTIONS */ /* -stack 0x8000 */ /* SOFTWARE STACK SIZE */ /* -heap 0x8000 */ /* HEAP AREA SIZE */ /* --args 0x100 */ /* SPECIFY THE SYSTEM MEMORY MAP */ MEMORY { PAGE 0: TEXT: org=0x00000008 len=0x00000FF8 PAGE 1: DATA: org=0x00000008 len=0x000001F8 } /* SPECIFY THE SECTIONS ALLOCATION INTO MEMORY */ SECTIONS { /* Forces _c_int00 to the start of PRU IRAM. Not necessary when loading an ELF file, but useful when loading a binary */ .text:_c_int00* : {} > 0x8 , PAGE 0 .text : {} > TEXT, PAGE 0 .stack : {} > DATA, PAGE 1 .bss : {} > DATA, PAGE 1 .cio : {} > DATA, PAGE 1 .data : {} > DATA, PAGE 1 palign=2 .switch : {} > DATA, PAGE 1 .sysmem : {} > DATA, PAGE 1 .cinit : {} > DATA, PAGE 1 .rodata : {} > DATA, PAGE 1 .rofardata : {} > DATA, PAGE 1 .farbss : {} > DATA, PAGE 1 .fardata : {} > DATA, PAGE 1 .resource_table : {} > DATA, PAGE 1 .init_array : {} > DATA, PAGE 1 .args : {} > DATA, PAGE 1 } Стек и куча задается в опциях линковщика - по 64 байта на каждый. А вот как бью эльфа(ELF) на 2 региона - код и данные: -b -image ROMS { PAGE 0: text: o=0x0, l=0x1000, files={text.bin} PAGE 1: data: o=0x0, l=0x0200, files={data.bin} } Но чего-то не фурычит как надо. Спецы, поможите!!!
  16. Да здравствует ПК и отладка на нём !!! )))
  17. OK! Please, recheck again your email and PM.
  18. Ну я когда-то писал свой векторный квантователь для составления кодовой таблицы вокодера MELP*** на STM32F405. Да, был Machine Learning по надиктованным словам, предложениям. Всё реально... Нейросети - рулят! Вот посмотрите пример того, как нейросети могут генерировать изображения к примеру: Есть более жуткие примеры того, что способны нагенерить нейро-сети ))
  19. При работе с этими DSP нужно серьезно настраиваться на то, что помощи будет ждать не от кого (особенно на просторах русского интернета). Чипы очень специфичны и по сравнению с теми же STM32 сложны в освоении. Не раз прийдётся медитировать, раскуривая мануалы на камни, прихватывая смежные модели.
  20. Магазин Терраэлектроника

    DSP от TI тоже попадают под ограничения для физлиц? Даже если они есть в Московском складе? Что надо указывать при составлении заявки от юрлица?
  21. Hello, Marc! Yes, JTAG pins are not connected. I wrote letter to your PM (Personal Message at this forum), please, see it.
  22. Отладочные платы, киты

    Актуально. Отладки на STM32F407 уже нет. Дисплеи тоже забрали.
  23. Ещё есть платы в наличии, обращайтесь в личку
  24. ОГО! так уже 3Д-чёртиков можно калякать - доки на нижнем уровне есть? Или всё серо и уныло: блобы и user API?