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

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

1 голос
/ 23 ноября 2011

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

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

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

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

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

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

1 Ответ

3 голосов
/ 23 ноября 2011

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

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

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

thumbulator выполняет только команды большого пальца, а не ARM и не Thumb2, причем thumb является общим знаменателем между процессорами arm (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 есть несколько плат на основе рук, которые могут управлять lcds и / или поставляться с lcds. Вы можете перейти к earthlcd и получить одну из серийных жидкокристаллических панелей, которые обеспечивают быструю разработку, но в дальнейшем, конечно же, потребуется более дешевое решение. В том же духе вы можете вместо этого смоделировать нечто похожее на землю с помощью вашего хост-компьютера, чтобы встроенный микроконтроллер отправлял обновления экрана через последовательный порт на хост, а хост отображал графику. Позже замените это обновление экрана чем-то другим.

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

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

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

...