Разработка графики на ARM

Я планирую сделать небольшую ОС и запустить на ней клон тетриса, используя ARM Cortex-M3. К сожалению, на данный момент я не могу купить платы для разработки, поэтому мне придется использовать симуляторы.

На самом деле я изучил QEMU с поддержкой LM3S6965EVB, который содержит процессор ARM Cortex-M3. Но очевидно, что более новые версии платы несовместимы с моделью в QEMU, так как ни один из примеров, которые я скачал с TI, похоже, не работает. Даже OLED-дисплей отличается.

Еще одна проблема заключается в разработке графики, поскольку OLED-дисплей для LM3S6965EVB имеет очень низкое разрешение. Я смог увеличить его до 640x480, отредактировав исходный код QEMU, но, поскольку я не смог заставить работать какие-либо примеры, поэтому я не знаю, работает ли он. Используя параметры отладки для SSD0323, все, что я вижу, это то, что он принимает некоторые данные, которые отправляются для инициализации устройства, а затем зависает...

Я рассматривал возможность выбора другой платы в QEMU, но это означало бы переделывать многие вещи с нуля, когда я получу в свои руки настоящее устройство, поскольку другие слишком мощные для чего-то такого простого, как это.

Что я должен делать? Существуют ли какие-либо другие симуляторы, которые могут помочь мне выполнить то, что я пытаюсь сделать? Я хочу разработать небольшую ОС и несколько небольших игр.

Заранее спасибо. Я искал решение в течение нескольких дней, и я действительно застрял.


person Emre    schedule 23.11.2011    source источник


Ответы (1)


То, что вам нужно переделать, частично связано с вашим программным обеспечением / системной инженерией, вы можете абстрагироваться там, где это необходимо, и вам нужно только переписать уровень абстракции, а не весь пакет. На самом деле вы можете выполнять большую часть разработки/тестирования вашего программного обеспечения на своей хост-системе и никогда не выполнять кросс-компиляцию, а только позже выполнять кросс-компиляцию на симуляторе или реальном оборудовании.

Например, я предполагаю, что вы создадите следующий видеоэкран где-нибудь в оперативной памяти, а затем, в зависимости от аппаратного обеспечения, измените некоторые биты в регистре и переверните страницу или вам придется сделать копию из этого буфера кадра на видео / ЖК-дисплей в любой форме. он хочет. Используя thumbulator, вы можете построить свой экран где-нибудь в оперативной памяти (в симулированном пространстве памяти), а затем добавить в симулятор, когда симуляция записывает в такой-то и такой-то регистр, взять эти байты из оперативной памяти и отобразить их на хост-компьютере (запустив симуляцию) в основном симулировать некоторые аппаратные средства. используйте sdl или основные вызовы X или что вы предпочитаете. Обычно я делаю снимки в файлы .bmp (очень легко писать), а потом просматриваю их.

Позже на аппаратном уровне ваша абстрактная функция update_screen() будет иметь специфичный для аппаратного обеспечения код для отображения этого экрана.

thumbulator выполняет только инструкции большого пальца, а не ARM и не Thumb2, большой палец является общим знаменателем между процессорами рук (ARMv4T и новее, за исключением cortex-m) и теми, которые поддерживают расширения thumb2 (cortex-m). за исключением кода запуска, опыт компиляции и программирования одинаков во всем семействе ARM. код (кроме кода запуска и, конечно, аппаратных доступов) будет работать как в семействе рук, так и в симуляторе. Если вы перейдете к cortex-m, то добавление спецификации архитектуры в командную строку изменит сборку с инструкций thumb+thumb2, что даст вам некоторое повышение производительности. если вы просмотрите другие мои проекты на github, вы обнаружите, что эта идея повторяется снова и снова, у меня есть много простых примеров cortex-m, где я использую gcc и llvm и создаю один и тот же код .C с инструкциями thumb и thumb+thumb2.

Другой совершенно другой ответ — получить GBA (Nintendo Game Boy Advance). Вы можете получить GBA SP (имеет дисплей с подсветкой, что делает весь опыт лучше) примерно за 30 долларов или около того на ebay. Примерно за такую ​​же сумму можно купить флеш-картриджи, принимающие sd-карты. У него есть ARM7TDMI, он запускает код большого пальца намного быстрее, чем код ARM, что дает вам возможность использовать большой палец при подготовке к другим / более новым ядрам, таким как cortex-m. Еще за 30 долларов вы можете получить кабель для подключения к игре, нарезать его, прикрепить переключатель уровня rs232 (я могу рассказать вам обо всем этом) и сделать последовательный кабель gba. Моя предпочтительная установка - иметь флэш-картридж, который я предварительно запрограммировал с помощью последовательного загрузчика, я загружаю программу через последовательный порт в оперативную память, а затем запускаю из оперативной памяти. Это позволяет избежать необходимости выдергивать флэш-картридж и/или SD-карту каждый раз, когда вы перекомпилируете программу. выполнимо и более дешевое решение, но быстро утомляет.

Если у вас есть Nintendo DS по цене от 12 до 15 долларов, вы можете приобрести флэш-картридж на основе SD, который вы также можете использовать для разработки. Я рекомендую сначала изучить gba, что вы можете сделать на NDS, если купите дополнительный картридж памяти gba (нужен ds lite, а не ndsi или 3d), поддерживаемый программным обеспечением на картридже. (например, ez flash 3 в размере 1 gba - это хорошо, а также память, которую вы можете прошить с помощью nds и перенести на gba (вот как я поставил на нее свой серийный загрузчик)). эти загрузчики позволят вам поместить ваш файл .gba на SD-карту картриджа nds, затем загрузить его в картридж gba, и он переключит nds в режим gba и запустится как gba.

есть много других решений, у sparkfun.com, вероятно, есть несколько плат на основе рук, которые могут управлять ЖК-дисплеями и / или поставляться с ЖК-дисплеями. Вы можете пойти на сайт earthlcd и получить одну из серийных ЖК-панелей, которые обеспечивают быструю разработку, позже, конечно, желательно более дешевое решение. В том же духе вы могли бы вместо этого смоделировать объект, похожий на EarthLCD, используя ваш главный компьютер, чтобы встроенный микроконтроллер отправлял обновления экрана через последовательный порт на хост, а хост отображал графику. Позже замените это обновление экрана чем-то другим.

Это последнее решение, примерно за 20 долларов вы можете получить плату обнаружения stm32f4, имеет cortex-m4, работает на частоте до 168 МГц, имеет ряд последовательных портов, из которых по крайней мере два имеют контакты, не используемые чем-то другим, вы могли бы легко иметь один порт для отладочных сообщений, а другой — для этого виртуального последовательного экрана. В каталоге stm32f4 в моем репозитории stm32vld на github у меня есть несколько примеров для начала работы с этой платой (а также stm32vld, который на несколько долларов дешевле, но не такой мощный, как этот stm32f4). Точно так же ваше хост-приложение может принимать нажатия клавиш и превращать их в команды пользовательского управления/управления игрой обратно в игровое программное обеспечение на микроконтроллере.

Есть, конечно, биглборд, или ястребиная доска, или raspberri pi, когда он выйдет, или open-rd (мне не нравится подключаемый компьютер, но мне нравится open rd), которые имеют видеообработку и видеовыход напрямую на монитор и/или телевизор с помощью составной или что-то подобное. От 150 до 200 долларов, и это просто работает. Вам определенно не нужно запускать Linux на этих платформах, вы можете создать свою собственную ОС или что угодно и запустить ее, очень просто.

Существует больше решений, чем у вас, вероятно, есть время и / или деньги, чтобы найти то, что соответствует вашей зоне комфорта или счастья для того, как вы хотите заниматься развитием, и попробовать этот путь.

person old_timer    schedule 23.11.2011
comment
Спасибо большое. Это было действительно полезно. Я подумаю над тем, что вы сказали. - person Emre; 24.11.2011
comment
О, также посмотрите на embeddedarm.com, может быть что-то, что подключается напрямую к ЖК-дисплею, на базе ARM и т. Д. - person old_timer; 24.11.2011
comment
Ну, они слишком сильны для моих целей. На самом деле я думал о чем-то с выходом VGA и SD-картой для игр, чтобы я мог подключить его к монитору или проектору; в конце концов, сделав из него самодельную игровую консоль. Однако я столкнулся с другой проблемой: видимо, разрешение, которое я хочу (640x480), слишком велико для многих чипов, поскольку они имеют только 64 КБ SRAM; так что мне тоже нужно найти чип с поддержкой внешней памяти. Поскольку игры будут храниться на SD-карте, я думаю, что попытка чтения графики с нее будет медленной ... В любом случае спасибо, я думаю, что буду использовать Thumbulator с SDL. - person Emre; 24.11.2011