Search the Community
Showing results for tags 'baremetal'.
-
Есть такой интересный камешек - SSD201. Привлекли паяемым корпусом QFN, два ядра Cortex-A7, встроенная DDR2 на 64 МБ. Прям как в V3s, только ядер больше! Прошёлся по интернету по докам, ничего на него не нашлось. Может не там искал. Киньте плиз ссылки на доки по этому камню! Интерeсуют Technical Reference, + подробный разбор работы с периферией (с каждым блоком: SPI, UART, DMA, e.t.c.) Ну и примеры на С/C++/Asm приветствуются.
-
Приветствую! Есть плата LicheePi Zero на базе чипа Allwinner V3s (ARM Cortex-A7) и собственно-сделанный BareMetal SDK, поддерживающий работу с: 1) файловой системой 2) видео-системой 3) звуковой системой 4) ввод данных (кнопки) в однозадачном режиме (цикл в main() + обработчик прерывания) Насколько реально будет туда портировать (перенести, сбилдить, скомпилять) J2ME виртуальную машину - для запуска MIDlet'ов ("Java"-игр) стареньких кнопочных телефонов с маленькими экранами (от 128x128 до 320x240) ? На всякий случай уточню: нужна не вся Java, а только J2ME, более конкретнее - CLDC и MIDP не ниже 2.0.. Поиск в интернете ни к чему ясному не подтолкнул: 1) все ссылки на java.net померли, вместо них Оракла - там чёрт ногу сломит где искать что надо 2) phoneME - кто его реально собирал? у кого есть опыт сборке сего чуда? Как у него дела с совместимостью игр? 3) какие ещё есть проекты? Как я это вижу? : 1) попытаться собрать J2ME эмулятор под Linux в Linux (платформа ПК x86) 2) выкинуть всё ненужное (секьюрити, работа с сокетами, сетью и прочим хламом) 3) завести вывод звука, графики и ввод данных - на бэкэнд(драйвера) своего SDK для V3s У кого-нибудь есть опыт сборки? Чё-то смотрю, что там больше Java надо, чем C. Его одним GCC реально собрать? В чём подвох? В сорцах куча Джавы... Без JRE соберётся? Велик соблазн запускать такие игрули:
-
Добрый день. Продолжаю осваивать чип Allwinner V3s. Столкнулся с таким фактом. Нужно сделать переброс "память-память" самым наискорейшим способом, который возможен. Начал ковырять DMA и обнаружил несколько малоприятных вещей: 1) DMA не поддерживает переменные шаги приращения. Только программирование через дескрипторы. 2) Тактовая частота работы DMA всего 200 МГц !!! В сорцах линукса зачем-то для тактовой DMA используют AHB, которая получается делением на 2 частоты ядра: 1200/2 = 600 МГц. Затем эти 600 МГц делятся ещё на 3 для DMA. В итоге выходит всего-навсего 200 МГц. Таким DMA полезно делать только подкачку аудио-данных при воспроизведении или записи звука. Или ещё что-нибудь свя занное с забором-выводом данных в периферию! Для быстрого коприрования память-память не подходит! А теперь о хорошем! Если копировать с помощью инструкций NEON: void MEMCPY(u8 *dst,u8 *src,u32 size) { asm volatile( "1: \n" "VLDM %[src]!,{d0-d7} \n" "VSTM %[dst]!,{d0-d7} \n" "SUBS %[size],%[size],#0x40 \n" "BGT 1b \n" : [dst]"+r"(dst), [src]"+r"(src), [size]"+r"(size) : : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "cc", "memory" ); } то скорость получается самая максимальная. Если битовое поле TEX выставить равным "001", то получим ещё более высокий прирост в скорости (+20 %): //VIDEO MEMORY i=61; mmu_tlb_address[i + (dram_base>>20)] = (dram_base + (i << 20)) | (0 << 19) | (0 << 18) | (0 << 17) | (0 << 16) | (0 << 15) | (1 << 12) | //TEX (3 << 10) | (0 << 9) | (15 << 5) | (0 << 4) | (0 << 3) | //Cache (1 << 2) | //Buffer (2 << 0); При этом бит кеширования в дескрипторе приёмника в MMU-таблице должен быть выключен! Если его включить в приемнике, то скорость просядет. Тоесть: приемник: TEX=1, C=0, B=1 источник: TEX=0, C=1, B=1 При таком раскладе выходит около 8000 FPS при копировании буфера 240 x 160 x 16 бит. (ядро 1200 МГц, память 456 МГц ). С DMA выходит в 8 раз меньше! Если увеличить частоту DMA в 2,3 раза, то скорость нисколько не увеличивается. Действительно ли с DMA всё так печально, или есть способ его заставить работать быстрее?