1

私は大きな懸念に直面しています。私は現在サンドイッチコースに参加しており、組み込みシステムでソフトウェアを開発する方法を自分で学んでいます。たまたま、open1788ボードでソフトウェアを開発しています。

LCD画面にちらつきが見られるので、ダブルバッファリング機能を実装することを計画しました。確かに描きながら形を見ることができます!

ダブルバッファリングを使用すると、画面全体の再描画が十分に速くなります。たぶん、クリッピングの管理を掘り下げて、必要な画面の一部だけを再描画する必要があるのでしょうか。しかし、それは問題ではありません。

そこで、ダブルバッファリングオプションの選択を処理するために、いくつかの関数を作成しました。ソフトウェアでダブルバッファリングを使用したくない場合は、メモリを割り当てません。そうでなければ私はします。

問題は、ヒープに割り当てられたデフォルトのスペースが最大1024バイトになることです。そして私の一時バッファの長さは261120バイトです!(高さ272ピクセルあたり幅481ピクセル、それぞれ16bpp)。

結果として、mallocはNULLを返しました。

私が取った最初の解決策は、静的バッファーを配置することです。つまり、次のようになります。

static WORD s_double_buf[481*272];

ただし、明らかな欠点は、ダブルバッファリングを使用しなくても割り当てられることです。

2番目の解決策は、構成ファイルを編集してヒープを大きくし、たとえば1048576バイト(0x100000)あたり1024バイトを置き換えることです。メモリスペースの節約に集中する必要があるため、このソリューションは好きではありません。

多分私は埋め込まれたプログラミングスキルをひどく逃しますか?それによると、最善の解決策は何ですか?どうすれば進歩できますか?データシートを読んだり掘り下げたりする私の厄介な能力についてはお話ししません。

誰かが私にプログラミングしているボードにほとんど付き添っている初心者のためのリファレンスを提供してくれたら本当にありがたいです。

前もって感謝します!

4

2 に答える 2

5

組み込みスペースでは、通常、実行時ではなくコンパイル時にダブルバッファリングを使用するかどうかなどの基本的な側面を決定します。したがって、プリプロセッサと条件付きコンパイルを使用することは完全に受け入れられます。

#ifdef WITH_DOUBLEBUFFERING

    static WORD s_double_buf[481*272];
    #define SCREEN s_double_buf

#else

    #define SCREEN your_real_framebuffer

#endif

GUI ライブラリの実装では、SCREEN にペイントします。

于 2013-01-09T14:53:27.840 に答える
4

組み込みシステムでは、通常、起動時にすべてのメモリを割り当てたいと考えます。これは、やりたいことすべてに十分な量があることをすでに知っていることを意味します。つまり、操作に失敗することはありません。これは通常、特に組み込みシステムにとっては良いことです。

メモリを静的に割り当てる - 簡単で、余裕があるように見えます。後日、メモリが不足していて、ダブルバッファリングなし済むことがわかった場合は、同じように簡単に取り出すことができます。

を使用する場合はmalloc、起動時にすべて完了しておけば、通常の操作中にメモリ不足から回復する必要はありません。

于 2013-01-09T13:28:34.040 に答える