14

私はマイクロコントローラープログラミングを始めており、対照的な見方を聞いています。マイクロシステムプログラミングのために業界で最も使用されている言語は何ですか?これはあなたが自分の仕事で使っているものですか?そうでない場合は、なぜですか?

PS:答えがアセンブリ言語ではないことを願っています。

4

10 に答える 10

38

私の経験では、Cを絶対に知っている必要があり、アセンブリ言語も役立ちます。

于 2009-12-21T04:28:20.730 に答える
13

非常に必要最小限のマイクロコントローラー (RS08 シリーズなど) を扱っている場合を除き、C 言語が最適な言語です。C を理解し、volatile や const などの機能を理解します。また、アーキテクチャについても理解してください - 何が効率的で、何が効率的でないか、CPU ができることは何か。これらは「デスクトップ」環境とは大きく異なります。stdint.h を愛することを学びましょう。

プロジェクトがスケールアップすると、C++ (または制限されたサブセット) に遭遇します。

ただし、CPU とデバッグ ツールとしての基本的なアセンブリの読み方を理解する必要があります。このスキルセットがなければ、優れた組み込み開発者になることはできません。

于 2009-12-21T05:25:19.320 に答える
13

どのような「対照的な」意見を聞いたことがありますか? ある程度は、マイクロコントローラとアプリケーションに依存します。ただし、C はほとんどすべてのアーキテクチャで使用できます (すべてとは言いませんが、おそらく遭遇するすべてのアーキテクチャで使用できます)。その点だけでも、C を学ぶことで最大のカバレッジが得られます。

すべてのアーキテクチャーで、アセンブラーと C コンパイラーが利用可能であることはほぼ確実です。32 ビットおよびほとんどの 16 ビット アーキテクチャでは、C++ も利用できます。私が遭遇した注目すべき例外は、Microchip の PIC24/dsPIC 部品で、C++ は Microchip 独自の GNU ベースのコンパイラでサポートされていません (ただし、サードパーティのコンパイラではサポートされている場合があります)。

8 ビット マイクロコントローラー用の C++ コンパイラーはありますが、そのようなプラットフォームでは C++ が普及しておらず、多くの場合、コンパイラーは完全な言語のサブセットです。通常 8 ビットが使用されるアプリケーションのタイプ (より具体的にはサイズ) では、C++ が役立つ場合がありますが、はるかに大きなアプリケーションほどではありません。したがって、一般的には C で十分です。

組み込みシステムにおける C++ については、多くの神話があります。この言語は C よりも大きく、システムのパフォーマンスや容量を損なう可能性のある構造を持っていますが、料金は C++ で使用した分だけです。しかしもちろん、使用するのが C のサブセットだけであれば、いずれにしても C で十分です。

C (および C++) についてのポイントは、それがシステム レベルの言語であるということです。追加のサポートなしでマイクロプロセッサで実行され、プロセッサ (および場合によっては外部 SDRAM) を初期化し、静的データを初期化し、スタックを確立し、C++ の場合は静的コンストラクターを呼び出すための非常に単純なランタイム スタートアップを保存します。これが、ターゲット固有のアセンブラーと共に、オペレーティング システムとカーネルの構築に使用される理由です。オペレーティング システムやカーネル自体を実行する必要はありません。

マイクロコントローラに依存する可能性があると私が提案した理由の1つは、たとえば、数Mbの外部SDRAMを備えたARM9であり、少なくとも4Mbフラッシュ(通常は外部-メモリが多くのダイスペースを占める)である場合です。 、その後、Linux、WinCE、または Symbian などの「重い」OS、または QNX や VxWorks などの大規模な RTOS を実行できます。次に、言語の選択 (OS が動作するようになった後) は OS の影響を受けますが、リアルタイム アプリケーションでは C と C++ が依然として支配的です (または、軍事、航空電子工学、および一部の輸送アプリケーションでは Ada がよく使用されます)。

中規模のアプリケーション (数百キロバイトのコードとデータ空間) の場合、.NET-Micro プラットフォームで C# を実行できます。しかし、私は数年前に英国で開催された Embedded Systems Show でこれのプレゼンテーションに参加しました。「でもリアルタイムですか」と質問すると、「そのために WinCE は必要ありません」と言われたとき、多くの聴衆からあえぎ声とうめき声が上がり、時間を無駄にするのをやめてプレゼンテーションを去った人もいました。その場で(私を含めて)。

だから私はあなたが聞いた「対照的な」意見にまだ興味があります。他の言語を使用することは可能ですが; あなたの質問への答え:

業界でマイクロコントローラのプログラミングに最も使用されている言語は?

決定的な答えは C です。私が与えた理由のために。この主張に異議を唱える人のために、ここに統計を示します(テキストで説明されている 2004 年以降の異なる調査方法に注意してください)。しかし、代替案のコレクションに追加するために、私は組み込みシステムのForthで2 年間プログラミングを行ったことがあり、Forthをまだ使用している人を知っていますが、それは少しニッチです。

于 2009-12-22T10:07:24.623 に答える
11

私は C と C++ の両方を使用して成功しましたが、ほとんどのマイクロコントローラー プロジェクトでは、ターゲット マイクロのアセンブリ言語に精通している必要があります。低レベルのハードウェアの問題をデバッグするためだけであれば、大雑把な知識であっても、アセンブリは不可欠です。

デスクトップ環境からマイクロ環境に移行する際に最も困難だったのは、ほとんどすべてを静的に割り当てる必要があることでした。おそらく外部RAMがない限り、マイクロでmalloc/newを使用することはあまりありません。

質問に FPGA と Verilog のタグを付けたことに気付きました。Altiumを見てください。統合環境で非常にうまく機能する C to Hardware コンパイラがあります。

于 2009-12-21T04:35:42.863 に答える
9

アセンブラについて:

  • 可能な限り、アセンブラーよりも C/C++ を優先します。できるだけ C または C++ で書くことで、生産性が向上します。これには、PC でコードの一部を実行できることも含まれます。これは、より高レベルのコード (アプリケーション層関数) の開発に役立ちます。
  • 多くの組み込みプラットフォームでは、小さなアセンブラーに慣れている人がプロジェクトに参加することをお勧めします。ほとんどの場合、スタートアップ コードと割り込みを適切に動作させるためであり、おそらく割り込みの有効化/無効化のための関数です。それは本当に徹底的に知っていることと同じではありません.基本的な実用的な知識だけで十分です.
  • RTOS ( µC/OS-IIなど) を新しいプラットフォームに移植する場合は、アセンブラについて詳しく知る必要があります。しかし、お使いの RTOS がすでにプラットフォームを十分にサポートしていることを願っています。
  • CPU パフォーマンスの限界に挑戦している場合は、おそらくアセンブラーをより完全に理解する必要があります。しかし、うまくいけば、パフォーマンスの限界をあまり押し上げないでください。それは、プロジェクトの実行可能性に足を引っ張る可能性があるからです。
  • DSP用に書いている場合は、おそらく DSP のアセンブラについてかなり詳しく知る必要があります。
于 2009-12-21T05:57:49.050 に答える
2

VHDL についても忘れないでください。

于 2009-12-21T04:45:06.640 に答える
2

マイクロコントローラの場合、アセンブラは C より前に登場します。ARM がこの市場に参入する前は、コンパイラはひどいもので、メモリと ROM は非常に小さかったです。コードを移植するための十分なリソースや共通性がないため、移植性のために C で記述しても意味がありません。

一部のマイクロコントローラのアセンブラは望ましくなく、ARM がその市場を席巻しています。より少ない費用、より少ない電力、より少ない設置面積で、より多くのリソースを備えた 32 ビット プロセッサを使用できます。それは理にかなっています。あなたのコードがまだ移植されていない場合でも、おそらく C でやっていけます。

要するに、アセンブラーと C です。彼らが BASIC や Java などを宣伝している場合は、その会社をブラックリストに登録して先に進みます。そこにいた、それをした、それを証明する傷跡があります。

于 2010-01-07T03:03:31.960 に答える
2

アセンブリ言語プログラミングの知識が必要です。C と C++ の十分な知識も必要です。マイクロ コントローラ プログラミングの専門知識を深めるために、これらのことに一生懸命取り組んでください。

于 2009-12-21T04:35:18.647 に答える
0

最初のアセンブリ。Cの後。

Assembly と C を知っている人は、C だけを知っている人よりも優れていると思います。

于 2010-07-07T19:23:23.557 に答える