DirectFBやMiniGuiのようなあらゆる種類のグラフィックライブラリには、LinuxやuClinuxのような何らかの基盤となるオペレーティングシステムが必要なようです。
私は、512kbのフラッシュ、LCDディスプレイ、およびいくつかの写真とGUIパーツを表示および処理するためのタッチスクリーンを備えたマイクロコントローラー用のソフトウェアを作成することに挑戦しています。
線、画像、フォントも処理できるビデオメモリへのポインタが必要なライブラリを知っていますか?
Swellsoftware社のC++版「PEG」を長年使用しております。これは商用ソフトウェアであり、無料ではありませんが、基盤となるスクリーン ドライバーはグラフィック メモリへのポインターのみを使用でき、さまざまな種類のグラフィック ハードウェア用のサンプル ドライバーが多数提供されています。サンプルドライバーを参照として使用して、独自のハードウェア用に独自のカスタムドライバーを作成しました。私たちは常に何らかの RTOS を使用してきましたが、PEG+ は OS なしでも動作すると考えています。
ここでチェックしてください: http ://www.swellsoftware.com/
幸運を、
サードパーティのソリューションを組み込むときは、自分で作成できたはずです。
ほとんどの環境では、画面は単なる 2 次元のピクセル配列です。パレット化されている場合もあればそうでない場合もありますが、それは問題ではありません。好きなように書くことができます。
線や円弧などを描画するための無料のコードがたくさんあります。
キラーはフォントかもしれませんが、サードパーティのアプリがフォントを実行するだけですべてのメモリを食い尽くすことがわかると思います。リソースが限られているため、フォントを事前に計算してビットをコピーする必要があります.
データの 2 次元配列を作成し、最初はお気に入りのホストですべての作業を行います。何を描いているかを確認したい場合は .bmp ファイルを保存するのは簡単です。一連の .bmp ファイルをアクションを見たい場合はビデオ。
汎用 C を使用し、libc 呼び出しを使用しない (独自の memcpy、memset などを作成する) 場合、このコードは、開発用のホストとターゲットのどこでも実行されます。
フォントはキラーになるでしょう。事前に計算する必要がありますが、その情報をできるだけ小さく絞り込み、実行時にデータを抽出して各文字のビットをできるだけ早く仮想画面にコピーする必要があります.
または、これらすべてを実行する多くの lcd ソリューションの 1 つを購入して、draw "Hello World!" などのコマンドを送信するだけです。いくつかの (x,y) で青を前景、白を背景として使用します。
基本的に、OS 以外のソリューションは依然として多くのライブラリを使用し、特定のアプリケーションには大きすぎると思います。バイトまたはピクセルの 2 次元配列は、自分で管理するのは簡単です。デスクトップ プラットフォーム用のアプリケーションを作成している場合でも、私はこの方法で行い、最後の最後に完全に再レンダリングされた画面更新を一部の OS 依存ライブラリにコピーします (ある OS から別の OS への最大の移植性を可能にします)。
対話性とGUIウィジェットの要件が非常に控えめな場合(または独自のウィジェットを設計しても問題ない場合)は、LibGDを参照してください。ライブラリの関数を使用して画面に表示する画像を描画し、gdImagePngToSink()を使用してフレームバッファに書き込みます。
無料ではありませんが、リソースの少ないシステムに適しています: http://www.tat.seおよびその製品である Kastor および Cascades。必要なのは、ビデオ メモリへのポインタ、malloc、およびファイル システムのようなものだけです。最後の 2 つの要件も絶対に必要というわけではありません。オペレーティング システムは必要ありません。
注意すべき重要な点は、LCD とタッチスクリーンのコントローラーです。そのタスク用の豊富な C ライブラリ (無料ではない) があります。簡単なグーグルでこれらの結果を得ました:Simplify TechnologiesおよびRamtex。
何かオープン ソースを見つけたい場合は、コントローラのタイプから始めて、組み込みデバイス フォーラムを検索してください (ARM でなくても、C コードを簡単に移植できます)。いくつかの提案:
また、一部のキット メーカーは、ボードに SDK (Linux を使用する場合と使用しない場合の両方) を提供しています。通常、ボードを購入すると、コードを使用するためのライセンスが付与されます。同じ LCD コントローラを搭載した開発ボードを検索します。
フットプリントを最小限に抑えるには、RamTEX を検討する必要があります。8 ビット PICS を使用する 2 つのプロジェクトで使用しました。ROM スペースは、RAM 用に ~1K のアプリケーションで約 35K でした (量は、ディスプレイ用に RAM バッファリングが必要かどうかによって異なります)。ROM 容量は、必要なグラフィック機能によって異なります。
彼らは完全な情報源を提供し、1 回限りの価格は 1000 ドル未満とかなりお得です (彼らの Web サイトに記載されている価格は、ドルまたは通貨に換算する必要があることに注意してください)。ロイヤリティや製品ごとの制限はありません。
それらは、さまざまなサイズとスタイルのフォント、および基本的な描画呼び出し (線、ピクセル、ボックスなど) を多数提供します。ボタンやメニューなどの定義済みの「オブジェクト」はありませんが、あまり問題なくポップアップ メニューを実装できました。それぞれ独自の属性を持つテキスト ボックス、メニューなどを定義するために使用できる「ビューポート」をサポートしています。
また、PC 上で動作するシミュレーターも付属しているため、組み込みシステムに移行する前に、デスクトップ上で表示コードを開発できます。
(古い質問ですが、このテーマに関する調査結果を投稿したいと思いました)
高品質のグラフィックスには、アンチグレインジオメトリが適しています。約50kBにコンパイルされ、あらゆる種類のフレームバッファーやレンダリングデバイスに書き込むようにカスタマイズできます: http ://www.antigrain.com/
ユーザーインターフェイスについては、Gwenが適切な選択のようです。簡単に移植でき、ビットマップスキンコントロールまたは長方形/円/線のフォームをレンダリングするようにカスタマイズできます: https ://github.com/garrynewman/GWEN
次に、RTOSも選択している場合、NuttXには独自のグラフィックサブシステムとウィジェットツールキットがあります:http: //nuttx.sourceforge.net/
おそらく、Run Length Encoding (RLE) を使用してフォントを圧縮する必要があります。カスタム RLE を設計するのがおそらく最善ですが、例については .pcx ファイル形式を参照してください。LCD のビット深度を指定しませんでしたが、フォントには、アンチエイリアスが不要な場合はピクセルあたり 1 ビット、またはアンチエイリアスを使用する場合は最大 3 BPP が必要です。等幅のテキストは適切ではないため、すべての文字に独自の幅が必要です。最適化されたルーチンを使用して、RLE 圧縮フォントから画面に直接レンダリングする必要があります。
SDL は移植性の高いグラフィックス ライブラリです。組み込み Linux システムで使用されていますが、OS なしで使用できると思います。SDL の優れた点は、Windows / Linux を使用して UI を開発およびテストし、後で組み込みシステムをターゲットにできることです。アプリケーション コードを変更する必要はありません。
SDL の上でAnti-Grain Geometry ライブラリ ( http://www.antigrain.com/about/index.html ) を使用することもできます。16 ビットまたは 24 ビットの LCD を使用すると、見事なグラフィックが生成されます。ARM/Linux システム上の私の実行可能ファイルは約 1 メガバイトだったので、あなたの環境には少し大きすぎるかもしれません。フォント レンダリング用の SDL、AGG、および libfreetype2 が含まれていました。AGG も少し遅いですが、美しい結果が得られます。
easyGUIを試してみてください。
easyGUIは、小規模な(より)組み込みシステムで動作するように特別に設計されたGUIグラフィックソフトウェア/ライブラリです。
オペレーティングシステムは必要ありません。基本的なサイクリックエグゼクティブで十分です。512kbのフラッシュはOK以上であるはずです。easyGUIが提供するライブラリは、必要なFlashの量を最小限に抑えるのに非常に柔軟です。
フォント、グラフィックス、ビットマップ、タッチスクリーン、および箱から出してすぐに使用できる一連のビデオコントローラーをサポートします。
さらに、それは本当に安価であり(ライセンス料なし、シートごとに一律の金額)、画面をデザインしてコードを生成するためのPCプログラムが付属しています。PCプログラムに慣れるまでにはしばらく時間がかかりますが、最終的には、PCで特定のことを試してから、生成してターゲットで実行されるのを見るのは非常に便利です。
彼らは彼らのウェブサイトにデモアプリを持っています。それをチェックする価値があります。
私の推測では、ツールチェーンとして DJGPP と組み合わせた FreeDOS のようなものと、グラフィックス ライブラリとしての Allegro は、おそらく 512k のフラッシュに収まり、それでも妥当な仕事をするかもしれません (ここで数 Mb の RAM を持つ x86 を持っていると仮定しています) )
しかし、これらは非常に x86 固有のものです (ただし、Allegro はそうではありません)。
512k 内で Linux カーネルと有用な量のユーザー空間ソフトウェアを取得するのは困難です (ただし、何かを取得することは可能です)。