4

Cはマイクロコントローラーで一般的に使用されており、Cでオブジェクト指向プログラミングを行うことが可能であるため、Cを使用してオブジェクト指向マイクロコントローラープログラミングを実装することをお勧めしますか? 長所と短所は何ですか?

4

6 に答える 6

4

私の短い答えはノーです。マイクロコントローラは、プログラム コード メモリ、実行速度、および RAM に関して非常に制限されています。C で物事をできるだけ単純に保つことをお勧めします。C はオブジェクト指向言語ではありません。最も考慮すべきことは、ポインターと構造体の使用ですが、ポリモーフィズムやそのような凝ったものを偽造しようとしないでください。

于 2010-12-28T15:04:10.270 に答える
3

ポリモーピズムが必要ない限り、構造体を渡しても問題ありません。しかし、ポリモーフィズム/仮想関数を使用してこれらの構造体内に関数を配置するとすぐに、非常に不可解になる可能性があります。

また、何をする必要があるかにもよります。ドライバーの場合、OO は必要ありません。おそらくアプリケーション用です。マイクロコントローラーは RAM が少ないことに注意してください。いずれにせよ、RAM フットプリントを常に低く保つ必要があります。

40,000 行を超えるアプリケーションを作成する予定がない場合は、単純な C で十分であり、手の込んだ OO トリックは必要ありません。

于 2010-12-28T15:03:47.443 に答える
3

はい。ただし、ツール チェーンが C++ をサポートしている場合は、それを使用する方がよいでしょう。マイクロコントローラーのリソースが特に制約されている場合、またはアプリケーションに厳しいリアルタイム要件がある場合は、C++、特に標準ライブラリの使用をかなり控えめにする必要がありますが、設計がおよび実装はOOです。

于 2010-12-28T18:56:07.247 に答える
3

はい、それは可能であるだけでなく、私の意見では時々お勧めです。

小規模なシステムでは、物事を行う方法を選択する際のコストを十分に認識する必要があります。同時に、特に、カスタマイズを迅速に実装するための柔軟なツールキットを作成する必要がある場合や、ランタイムのホットプラグを許可する必要がある場合は、コードを整理するための「軽量」オブジェクト指向の実際の利点がいくつかあります。C で軽量オブジェクトを自分で実装する (たとえば、構造体と関数ポインターを使用して行う) ことは、適切な妥協点になる可能性があります。

おそらく、これの最もよく知られた例は Linux カーネルです。

于 2010-12-28T17:40:02.130 に答える
2

確かに、C で OOP を使用できます。#define を使用して、キーワードを Python のように変更することもできます。ただし、どちらも行うことはお勧めしません。

誰かが C でより複雑な OOP を実行しようとするのを見たとき、それは常に判読不能なコードになってしまいます。私が C コードを見るとき、C の OOP がどのように機能するかについての誰かの考えではなく、C のように見えることを期待します。

マイクロで OOP が必要な場合は、C++ を使用します。多く/ほとんどの新しいマイクロはそれをサポートしています。マイクロの速度、メモリの量、およびパフォーマンスの制約が何であるかがわからないため、マイクロのメモリや速度が不十分であると言う人は無視してください。適切に作成された C++ は、適切に作成されていない C よりもサイズと速度の点で優れています。

于 2010-12-28T16:16:49.347 に答える
-2

次の組み込みプロジェクトでは、間違いなくC++の一部を使用し、typedef、defines、およびその他すべての厄介な c を除外して、クリーンなインターフェイス/クラス/静的オブジェクト ベースのアプリケーションを構築します。私が利用する予定のものは次のとおりです。

  • クラス。これにより、構成によってスタブ オブジェクトを使用してコードと単体テストをカプセル化できます。
  • インターフェース。人々があらゆる種類の型定義、定義などのゴミ箱として使用する傾向がある c ヘッダー ファイルと比較して、各クラスの明確な契約の力を与えてくれます。また、インターフェイスにより、定義と実装を分離でき、スタブ オブジェクトを使用した単体テストが可能になります。
  • 静的オブジェクト。動的メモリはないと予想されるため、すべてのオブジェクトは静的になります。おそらく、1 つのアプリケーション クラスがすべてを定義および初期化するため、アプリケーションの構成になります。

全体として、それは c と同じくらい効率的なものにコンパイルされますが、はるかに優れた概要があります。

于 2011-01-10T19:04:17.183 に答える