1

小さな OS を作成し、ARM Cortex-M3 を使用してその上で Tetris クローンを実行することを計画しています。残念ながら、現時点では開発ボードを購入できないため、シミュレーターを使用する必要があります。

私は実際に、ARM Cortex-M3 プロセッサを含む LM3S6965EVB をサポートする QEMU を調べました。しかし、私が TI からダウンロードした例はどれも機能していないように見えるため、ボードの新しいリビジョンは QEMU のモデルと互換性がないようです。OLEDディスプレイも違います。

もう 1 つの問題は、LM3S6965EVB の OLED ディスプレイの解像度が非常に低いため、グラフィックス開発を行うことです。QEMU ソースを編集することで 640x480 まで取得できましたが、動作する例が得られなかったため、動作するかどうかもわかりません。SSD0323 のデバッグ パラメーターを使用すると、デバイスを初期化するために送信されたデータの一部を受け入れてからハングすることがわかります...

QEMU で別のボードを選択することを検討しましたが、実際のデバイスを手に入れたときに多くのことを最初からやり直すことを意味します。他のボードはこのような単純なことには強力すぎるためです。

私は何をすべきか?私がやろうとしていることを達成するのに役立つ他のシミュレーターはありますか? 小さな OS といくつかの小さなゲームを開発したいと考えています。

前もって感謝します。私は何日も解決策を探していましたが、本当に行き詰まっています。

4

1 に答える 1

3

どれだけやり直さなければならないかは、部分的にはソフトウェア/システムエンジニアリングに関係しています。必要な場所を抽象化でき、パッケージ全体ではなく抽象化レイヤーを書き直すだけで済みます。実際には、ホスト システム上でソフトウェアの設計/テストの多くを行うことができ、クロス コンパイルを行うことはできません。後でシミュレータまたは実際のハードウェアにクロス コンパイルするだけです。

たとえば、RAM のどこかに次のビデオ画面を構築し、ハードウェアに応じてレジスタとページ フリップの一部のビットを変更するか、このフレーム バッファからビデオ/LCD に任意の形式でコピーする必要があると仮定します。Thumulator を使用すると、(シミュレートされたメモリ空間の) どこかの RAM に画面を構築し、シミュレーションがそのようなレジスタに書き込むときにシミュレータに追加し、これらのバイトを RAM から取得してホスト コンピュータに表示する (シミュレーションを実行する) ことができます。基本的にシミュレートします。いくつかのハードウェア。sdl または基本的な X 呼び出しなど、お好みのものを使用してください。私は通常、スナップショットを .bmp ファイル (書き込みが非常に簡単) に作成し、後で確認します。

その後、ハードウェアでは、抽象化された update_screen() 関数に、その画面を表示するためのハードウェア固有のコードが含まれます。

thumbulator は、ARM および Thumb2 ではなく、thumb 命令のみを実行します。thumb は、arm プロセッサ (ARMv4T 以降、cortex-m を除く) と、thumb2 拡張をサポートするプロセッサ (cortex-m) の間の共通点です。スタートアップ コードを除けば、コンパイルとプログラミングのエクスペリエンスは、ARM ファミリ全体で同じです。コード (スタートアップ コードともちろんハードウェア固有のアクセスを除く) は、シミュレータだけでなくアーム ファミリ全体で実行されます。cortex-m に移動した場合、コマンド ラインにアーキテクチャ仕様を追加すると、ビルドが親指のみから親指 + 親指 2 命令に変更され、パフォーマンスがいくらか向上します。github で私の他のプロジェクトを閲覧すると、このアイデアが何度も繰り返されていることがわかります。gcc と llvm を使用して同じものをビルドする単純な cortex-m の例がたくさんあります。

別のまったく別の答えは、GBA (Nintendo Game Boy Advance) を入手することです。GBA SP (バックライト付きディスプレイがあり、全体のエクスペリエンスが向上します) は、eBay で約 30 ドルほどで入手できます。ほぼ同じ金額で、SD カードを使用するフラッシュ カートリッジを購入できます。ARM7TDMI があり、ARM コードよりもはるかに高速にサム コードを実行し、cortex-m などの他の/新しいコアに備えてサム エクスペリエンスを提供します。さらに 30 ドルで、ゲーム リンク ケーブルを入手し、それを切り刻み、rs232 レベル シフターを取り付けて (このすべてについてお話しできます)、gba シリアル ケーブルを作成できます。私の好みのセットアップは、シリアルブートローダーで事前にプログラムしたフラッシュカートリッジを用意することです。プログラムをシリアル経由でRAMにダウンロードし、RAMから実行します。これにより、プログラムを再コンパイルするたびにフラッシュ カートリッジや SD カードをヤンクする必要がなくなります。実行可能、

12 ドルから 15 ドルのニンテンドー DS をお持ちの場合は、同様に開発に使用できる SD ベースのフラッシュ カートリッジを入手できます。最初に gba を学習することをお勧めします。これは、カートリッジのソフトウェアでサポートされている gba 側のメモリ カートリッジ (ndsi や 3d ではなく ds lite が必要) を購入した場合に NDS で実行できます。(たとえば、ez flash 3 in 1 gba サイズは良いものであり、nds でフラッシュして gba に持ち越すことができるメモリと同様です (これは、シリアル ブートローダーをその上に置く方法です))。これらのローダーを使用すると、.gba ファイルを nds カートリッジの sd カードに置き、それを gba カートリッジにロードすると、nds が gba モードに切り替わり、gba として実行されます。

他にも多くのソリューションがあります。sparkfun.com には、LCD を駆動したり、LCD を搭載したりできるアーム ベースのボードが多数ある可能性があります。earthlcd にアクセスして、迅速な開発を可能にするシリアル ベースの lcd パネルの 1 つを入手できます。もちろん、後でより安価なソリューションが求められます。同じように、ホスト コンピュータを使用して、earthlcd のようなものをシミュレートすることもできます。組み込みのマイクロコントローラがシリアル経由でホストに画面の更新を送信し、ホストがグラフィックを表示します。後でその画面の更新を別のものに置き換えます。

この後者のソリューションは、約 20 ドルで stm32f4 ディスカバリー ボードを入手でき、cortex-m4 を搭載し、最大 168MHz で動作し、多くのシリアル ポートを備えており、そのうち少なくとも 2 つにはピンが使用されていません。ポートはデバッグ メッセージ用で、もう 1 つはこの仮想シリアル画面用です。github の私の stm32vld リポジトリの stm32f4 ディレクトリには、そのボードを使用するためのいくつかの開始例があります (また、数ドル安いですが、この stm32f4 ほど強力ではない stm32vld もあります)。同様に、ホスト アプリケーションはキーストロークを受け取り、それをユーザー制御/ゲーム制御コマンドに変換して、マイクロコントローラー上のゲーム ソフトウェアに戻すことができます。

もちろん、ビーグルボード、ホークボード、またはラズベリー pi が出てきたとき、または open-rd (私はプラグ コンピューターは好きではありませんが、オープン rd は好きです) があります。コンポジットでも何でも。約 150 ドルから 200 ドルで、それで動作します。これらのプラットフォームで Linux を実行する必要はまったくありません。独自の OS などを作成して、非常に簡単に実行できます。

おそらく追求する時間やお金よりも多くの解決策があります。開発をどのように行い、その道を試してみたいかについて、あなたの快適または幸福ゾーンに収まるものを見つける必要があります。

于 2011-11-23T15:14:28.340 に答える