電子技術者向けのプログラミング言語


22

私は電子通信工学の学生です。大学に入る前は、プログラミングとコンピューターアプリケーションに興味がありました。私はWindowsアプリケーションの設計とそのテクニックの学習に集中していましたが、今では、これは私の分野では役に立たないと感じています...コンピュータサイエンスとソフトウェアの開発についてすべてを学ぶ必要はありません!(私はこれについて正しいですか?)

VB .Net、C#、C ++を知っています。私は休日に十分な時間があるので、「電子工学の分野」でプログラムにより深く掘り下げたいです。それで、あなたは何を学び、または集中することをお勧めしますか?

マイクロコントローラーやその他の集積回路のプログラミングにこれらの言語を使用したいです。C ++で十分ですか、それともCをマスターする必要がありますか?あなたの考えを教えてください。


3
「はんだ」またはもっと真剣に、プレーンCはサポートツールとしてかなり伝統的ですが、Pythonは現在少しトレンディです。
クリスストラットン

回答:


29

はい、できる限りCを使用することを学ぶことはほぼ間違いなく良い動きです(C ++が有用な出発点となりますが、 残された注意事項、特に小さな組み込みシステムのコーディングの違いについては、まだまだたくさんあります) Windowsのようなものを書くことに比べて)ユビキタスです。

一定のサイズ(PIC、AVR、MSP430など)未満のほとんどのマイクロコントローラーは、多くの高品質(無料および$$バージョン-たとえば、多くの商用コンパイラーが無料のGCCコンパイラーに基づいている)Cコンパイラーを使用するため、C(またはアセンブラー)を使用します。
優れたJAL for PIC(元の著者であるWouter Van Ooijenのメンバー)、PICBASIC、Adaバリアントなど、他の言語も入手できますが、人気があり、利用可能なコンパイラの数が多いため、Cが最適な言語ですほとんどの場合。これは確かにそれが最高の言語であることを意味するわけではありませんが、最も人気のある言語を使用することには明らかな利点があります(ドキュメント、サポート、移植性、コラボレーションなど)
。多くのARMバリアントのようなより複雑で大きな32ビットマイクロには、 C ++およびその他のコンパイラが利用可能。

私はすぐに飛び込んで、いくつかの開発ボードを手に入れてコーディングします。PIC16Fのようなローエンドの8ビットマイクロ(Microchip Directの多くのスターターキット)を選択できます。PIC24のような
16ビットマイクロレンジの中間、および何らかの種類のC / C ++ /組み込みLinux ARM-STM32F4 ARM Cortex M4 Discoveryは、手に入れる価値のある非常に安価な開発ボードです。
プログラマブルロジックおよびハードウェア記述言語(HDL-大きな2つはVerilogとVHDL)側では、DiglentなどのFPGAまたはCPLD開発ボードを入手する価値があるかもしれません。

開発ボードを待ちたくない場合は、MPLABまたはMPLABXをダウンロードし、優れたシミュレーターを使用してPIC開発を試してみてください。同じことは他のツールにも当てはまります。たとえば、ザイリンクスISE Webpackを無料でダウンロードして、HDLおよびプログラマブルロジックデザインを試すことができます。


9
PICは安価かもしれませんが、火炎戦争を開始するリスクがあるため、PICを学習ツールとして使用すると、汎用マイクロコントローラーのプログラミングを教えるのではなく、PICのプログラミングを学ぶことができます。このために、MSP、AVR(Arduino)、ローエンドARM Cortex、または由緒ある8051プロセッサーでさえ、より簡単に移行可能なスキルを提供します。
uɐɪ

どうもありがとうございました...これは非常に役に立ちました。しかし、あなたの答えを要約すると、私が今必要なのは、C ++の作業を続け、Cを習得し、VerilogまたはVHDL、あるいはその両方を習得し、それらのシミュレーターを練習または単に使用するためのいくつかの開発ボードを手に入れることです。
シラージムハンマド

1
@SirajMuhammad-はい、それについてです。VerilogとVHDLの両方を学ぶ必要はありませんが、通常はデザインで一緒に使用できるため(たとえば、VHDLで他の人が設計したソフトコアプロセッサを使用できます) Verilogの設計、およびそれは正常に機能します)ので、1つを選択してください。
オリグレイザー

4
@Ian- PIC でなければならないことを示唆しいません、それ単なる例です(したがって「PICのような」)Cでプログラミングしている場合、全体的なそこにある小さなマイクロの違い。もちろん、1つのマイクロインサイド(アセンブリとすべて)を実際に知ることは有用ですが、より高いレベルで開始するには、ツールが異なるだけで、ほとんど同じように見えるはずです。何かにコミットする前にいくつか試してみる価値があると思います。
オリグレイザー

2
「すでにC ++を知っていれば、それほど難しくないはずです」「VB .Net、C♯、C ++」を知っている人は、後者をおそらくかなり高レベルのオブジェクト指向のRAIIスタイルで使用しており、マニュアルを適切に把握するのに時間がかかるかもしれないことに同意しませんメモリ管理。
左辺約

23

Cを学び、MSP430やARM Cortexなどの安価なマイクロコントローラー開発ボードを入手し、少なくともいくつかのCプログラムを作成してロードします。

私はコンピューターサイエンスの学位とソフトウェア開発のバックグラウンドがあり、ほとんどがゲームのC ++プログラミングで、現在はiOSゲームとアプリですが、私の最後の仕事はARM Cortex M3システムのファームウェアプログラミングを始めたセミプロEEギグでした、そして基本的な回路設計とボードレイアウトを行う方法を学び、いくつかの簡単なボードを設計することになりました。したがって、基本的には、ハードウェア/ソフトウェアの設計を橋渡しするために最高のプログラミング言語を使用するという問題に直面しなければなりませんでした。

Cは絶対にあなたが知る必要がある言語です。C ++でプログラムを作成し、実際にCの機能セットに制限する必要がなく、「同じことだ」と言う人にとっては簡単ですが、そうではありません。特に、C ++が進化して機能を収集した方法、および主流のC ++プログラマーがそれらの機能を使用する方法は、C ++アプリケーションとは対照的に、かなり大きなCアプリケーションで作業することとはまったく異なります。ファームウェアSDKはCライブラリの束であり、MCUに適合する他のものはすべてCライブラリであり、MCUで意味のあるOSはCで書かれているなどです。

とはいえ、MCUツールチェーンの多くはコンパイラとしてGCCを使用しているため、まともなMCUファミリを使用している場合は、ほぼ確実にC ++コンパイラを使用できます。ただし、使用する機能、特に標準ライブラリの機能については十分に注意する必要があります。デバイスに収まるには大きすぎるバイナリになりがちなので、非常に簡単です。組み込みデバイスでC ++を使用するための良いケースがあると思います。C++には、ごみやサイズや速度のペナルティのない素晴らしい機能がいくつかあります。巧妙な機能の使用という点では、スペクトルのSTLの終わりよりも、スペクトルのCスタイルの終わりの方が先です。

適切な組み込みインタープリターを使用してMCUでLuaまたはPythonを使用できると言っている人にはあまり注意を払わないでください。それは本当です、私はそれをやったし、それは楽しいですが、現時点では、ハック・ア・デイに現れるおもちゃのプロジェクトやもののためのものです。ムーアの法則は最小のプロセッサにも容赦なく適用されているので、そのようなことをもっと見ると思います。これは、多くのアセンブリがあったゲームで起こり、CとC ++で長く持ちこたえたものです他の誰よりも、そして今ではすべてが非常に高速であり、開発者の生産性が非常に重要であるため、多くの開発は組み込みの高レベル言語または完全に高レベル言語で行われます。それでも、企業がPythonとLuaのバックグラウンドを持つファームウェアプログラマーを雇うのを見るのは数年前でしょう。

組み立てにも時間をかけすぎないでください。概念に精通していても悪くはありませんが、アセンブリプログラミングがあったとしても、自分が多くのことをしているとは思わないでしょう。ゲームと組み込みのこの従来の知恵のように、それは「知っておくと良い」アセンブリであり、実際にそれらの分野で働いていない人々によってしばしば繰り返されます。しかし、実際には、アセンブリをまったく作成することはほとんどありません。そうすると、おそらく最適化のための数行か、APIを持たないハードウェアで何かになるでしょう(ただし、数行のアセンブリをラップするものを作成した後)。私はいくつかのゲームに取り組んできましたが、そのボード/ファームウェアデザインプロジェクトと、商業プロジェクト用に作成したアセンブリの合計ライン数は、おそらく10代前半です。それ'


1
数行のアセンブリがインラインアセンブリステートメント(asm())に含まれている可能性が高く、Cコードに適切に埋め込まれていることは言うに値します。これはあらゆる点で勝利の組み合わせです。高レベルであるがコンパクトで、たとえばタイミングを正確に合わせる必要がある場合に、時々アセンブリに浸ることがあります。avr-gccツールチェーンは、既にCマクロで、この多くを行うので、あなたは決して予告。
-Alexios

9
アセンブリを記述するよりも、アセンブリを読み取ることができる方がおそらく重要です。これにより、コンパイラーがマイクロに実行するよう指示していることを理解でき、ごくまれに、コンパイラーが間違っていることを発見できるようになります。また、デバッグツールを最大限に活用し、それらが提供するシングルステップ機能を使用するには、アセンブリをある程度理解する必要があります。
uɐɪ

1
間違いなくそれに同意します。意欲的なプログラマにとって最良の練習の1つは、少なくとも関数、配列、および構造体を処理して、アセンブリでスタックフレームがどのように見えるか、プログラミング言語の基本要素がどのように見えるかを学習する玩具言語コンパイラとコードジェネレーターを書くことだと思います。
準最適

3
@Ian-アセンブラを読むことができても、それを書く方法がわからなければ役に立たない。あなたはそれを読んで、あなたがそれを書いたならあなたがしたであろうことと比較する必要があります。
Rocketmagnet

2
@Rocketmagnet-コンパイラーが最も効率的なアセンブリー実装を生成したことを確認する必要はありません。要件は、生成されたアセンブラを読み取り、実装されたコードのロジックが意図と一致することを確認できることです。これは、他の人間の言語を使用するのと同じです。フランス語やドイツ語、ラテン語を読んだり理解したりすることができます。
uɐɪ

10

私はあなたがCで非常に有能である必要があることを他の皆に同意します。

また、少なくとも1つのアセンブリ言語を学ぶことをお勧めします。これを行うと、はるかに優れたCプログラマーになります。内部で何が起こっているのかを知る必要があります。これは、PCの世界よりも組み込みの世界でずっと真実です。

Cが生成しているアセンブラを理解すると、速度とコンパクトさの点でより最適なCを作成できます。より速いコードとは:

  • より低速で安価なMCUを使用し、競合他社を打ち負かすことができます。
  • EMCコンプライアンスを改善するために、クロックレートを下げることができます。
  • 低電力アプリケーションでは、MCUはスリープ状態により多くの時間を費やすことができ、バッテリー寿命が長くなります。

よりコンパクトなコードは、より少ないメモリでより安価なMCUを使用できることを意味します。または、さらに機能を追加する余地があります。


あなたが学習を検討するかもしれない他の言語はVerilogです。これはハードウェア記述言語であり、見た目だけでなく機能もCとはまったく異なります。Verilogは、サイプレスPSoC3および5のような非常に強力なチップを活用する方法を開きます。これは、アナログおよびデジタルの再プログラム可能なハードウェアを備えたマイクロコントローラーです。これにより、他のMCUでは非常に困難な驚くべきことを実行できます。また、FPGA設計を行うこともできます。


「1つのアセンブリ言語」とはどういう意味ですか?Assemblyという言語があることは知っていますが、ブランチやそれに類するものはありますか?いくつか名前を付けていただけますか?そして、答えてくれてありがとう。
シラージムハンマド

4
各タイプのCPUまたはMCUには、異なる命令を持つ独自のアセンブリ言語があります。これらはすべてかなり似ていますが、重要な違いがあります。使用しているMCUのアセンブリ言語を学びます。
Rocketmagnet

1
まさにこれを言うつもりでした。Cとアセンブリは、通常は低レベルのものを扱っているため、電子工学で最も使用されています。Object Orientedは実際にはあまり活用されていません。C/ Assemblyから来る一種の低レベルの考え方は、あなたが作業する他のあらゆるものにも適用されます。
ムズ

9

防衛業界で8年間働いてきたMSEEとして、LabVIEW(グラフィカルで厳密に型指定されたデータフロー言語)で適切にプログラミングする方法を理解すると、仕事が不足することはありません。

LabVIEWはハードウェアエンジニア向けのプログラミング言語として始まりました。コードが回路図に非常に似ているという事実から、これを見ることができます。ただし、過去25年間でLabVIEWはオブジェクト指向とマルチスレッドをサポートする本格的な機能豊富な言語に発展しました。実際、テキストベースまたはその他のプログラミング言語はLabVIEWよりもマルチスレッドアプリケーションのプログラミングが簡単ではない、と私は主張します。これは主に、データフローのパラダイムによるものです。CPUコアの数が増え続けるにつれて、LabVIEWは汎用言語としてますます重要になります。

LabVIEWを知るもう1つの利点は、LabVIEWコードを取得し、Xilinxコンパイラに渡す前に舞台裏でVHDLに変換するLabVIEW FPGAモジュールを使用してFPGAをプログラミングするだけで済みます。LabVIEWスキルを使用して、VxWorksまたはPhar Lapを使用するLabVIEW Real-Timeモジュールを介してReal-Timeコードのプログラミングに移行することもできます。

注:私はLabVIEW認定開発者です。

ここに画像の説明を入力してください


5
私が見たすべての生産LabVIEWは次のようになります:thedailywtf.com/Articles/Labview-Spaghetti.aspx そのようなコードを維持したいと思っている人たちに強力な雇用市場があることは疑いありません。
Markrages

@markragesダイナミックVI呼び出しやグローバルが存在するのと同じくらいひどくひどいコードを維持および/または拡張するように頼まれました。この問題は、LabVIEWである両刃の剣です。一方では、エンジニアがプログラミングできる言語として販売していますが、ソフトウェアアーキテクチャの強固な基盤がなければ、このようなコードを取得することになります。ありがたいことに、NIはLabVIEW 2012でこの問題を十分に解決しました。シンプルなステートマシンから複雑なOOPベースのアクターフレームワークに至るまで、アーキテクチャ用のよく書かれたコメント付きテンプレートを提供しています。
SiegeX

@markrages問題は2つあります。1つ目は、管理者は危険を冒すだけの十分なトレーニングをエンジニアに提供します。会社で会った9/10のLabVIEWプログラマは、トレーニングを受けただけで、基本的に構文だけを教える最初の2つの基本コースのみを受講したと思います。第二に、LabVIEWは機能が豊富な言語になりましたが、グラフィカル管理は簡単だと考えているため、今日のどの言語にも匹敵します。Managemntは、複雑な回路にメディアを設計するためにソフトウェアエンジニアをタスクことはない、まだ彼らは、「LabVIEWのを知っている」場合、彼らは、複雑なソフトウェアの問題でEEを投げて何の問題もない
SiegeX

@markrages:LabVIEWが好きな理由を思い出したとき、あなたのコメントを見て、なぜ嫌いだったかを思い出しました。ああ、欲求不満の時間はすべて一度に戻ってきました。
ジョニーBグッド

6

マイクロコントローラの低レベルのプログラミングを行いたい場合は、アセンブリ言語プログラミングに慣れている必要があります(アーキテクチャが異なるほど良い)。そして、C ++を使用するよりもCを多く使用します。

一般的なエンジニアリング作業では、Matlab(ScilabやGNU Octave)などの数学指向言語がモデリングとプロトタイピングに一般的に使用されます。

また、ソフトウェアとハ​​ードウェアの多くのIDEは、通常TCLまたはLUAを使用してスクリプト化できるため、一般的なスクリプト言語(Perl、Python、PHP、Javascriptなど)にある程度精通していると役立ちます。

ハードウェア設計には、VerilogやVHDLのスキルが必要です。


6

C ++で十分ですか?多分。

Cはすべてのmcu:sの90〜99%などで使用されるため、履歴書にはCが必須であることに注意してください。

しかし、あなたは高レベルの男なので、縮小されたC ++でプログラムされているため、Arduino:sでプレイを開始できます。これは、C ++がmcuの世界で今できることの大まかなアイデアを与えるでしょう。


3

マイクロコントローラーの場合(そしてマイクロコントローラーのみを取り上げます)、CはC ++よりもはるかに優れたエントリー言語だと思います。アセンブリーは次のステップであり、Cコンパイラーがどのようにあなたを台無しにしているのか、バグを作成し、クロックティックを盗むなどを理解し、プラットフォームから最大限のパフォーマンスを引き出すのに役立ちます。これはすべて、arduino、BASIC Stamp、またはラップアップされたマイクロコントローラーを含む他のプラットフォームではなく、マイクロコントローラーについて話していることを前提としています。

「あなたの分野」に何が役立つかを言うのは難しい-そして、学生としてあなたはあなたの分野がまだ何であるかを本当に知らないかもしれないことを示唆する!-しかし、あなたの言語セットはかなり合理的であると思われ、何度も何度も使用していることに気付くでしょう。少なくとも、1つの構造化言語をしっかりと把握することで、次の言語が非常に簡単になりますが、Windowsプログラミングスキルはポケットに入れておくと便利だと思います。


2

プロセッサを使用する場合は、CおよびCステートメントによって生成されるアセンブラコードの種類を学習できますが、bashなどのUnixコマンドラインシェルの使用方法や、sedなどのそれに付属するツールの使用方法についても学ぶ必要があります。 ed、awk、vim / vi、find、tar、gzip、...、およびPythonは多くのプラットフォームで使用でき、「物事を成し遂げる」良い方法です。


2

本格的な組み込み開発者になりたい場合は、Cを学ぶ必要があります。また、アセンブラーを使用することはほとんどありませんが、アセンブラーを知っている必要があります。


0

まず、ファームウェアからボード設計、チップ設計に至るまでのハードウェア設計に関わる人を意味するように、エレクトロニクスエンジニアを定義します。上記のように「C」が必要な場合は、ファームウェアを実行する場合があります。より深いソフトウェアは単なるツールになり、C / C ++からLispのような言語までの補完的な言語のいくつかのcomp sciの概念を理解することは、詳細よりも重要になります。設計作業をサポートするためにソフトウェアが必要になりますが、それは物理的な実装でできることの基本的な制限を理解することを優先しません。デジタル設計は、それらの言語で表現されていても、Verilog / VHDLではありません。完全なカスタム設計およびインシリコ設計では、Lispのような言語とC-関数型言語が表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.