組み込みプログラミングは、電気工学やソフトウェア開発に近いですか?[閉まっている]


34

私はマイクロコントローラーに組み込みCを書く仕事に就いています。最初は、ソフトウェアスタックではプログラミングの埋め込みが低すぎると思っていましたが、おそらく間違っていると考えています。

私は自分自身を電気技師とは考えていないので、通常は埋め込みコードを書く機会を逃げていました。これは悪い仮定ですか?組み込みシステム用の興味深く有用なソフトウェアを書くことができますか、それともソフトウェアスタックが低すぎて自分自身を蹴飛ばすでしょうか?

私はコンピューターサイエンスの学校に通い、コンパイラの作成、並行アルゴリズムの検討、データ構造の設計、フレームワークの開発を本当に楽しんでいました。しかし、私は現在、Web開発者として雇用されており、今説明した興味深いことを叫んではいません。(現在、「このチェックボックスは左に4ピクセルにする必要があります」や「この日付の形式が間違っている」などの問題に対処しています。)

皆様のご協力に感謝します。私は自分で決断を下さなければならないことを知っています。組み込みプログラマになることの意味と、面白いと思うものに合うかどうかを明確にしたいと思います。

回答:


33

組み込みシステムでの作業が得意である場合は、はい、時々EEのように考える必要があります。一般的には、さまざまな周辺機器(UART、SPI、I2C、USBなどのシリアルバス)、8ビットおよび16ビットタイマー、クロックジェネレーター、ADC、DACとインターフェイスするコードを作成するときです。マイクロコントローラの「データシート」は、多くの場合、すべてのレジスタのすべてのビットを記述しているため、数百ページにわたっています。オシロスコープまたはロジックアナライザーを使用してボードをプローブできるように、回路図を読み取ることができます。

それ以外の場合は、ソフトウェアを書くだけです。しかし、厳しい制約の下では、多くの場合、正式なOSや他のフレームワークがなく、RAMはわずか数KB、プログラムメモリは64 KBしかありません。(これらの制限は、より小さな8または16ビットマイクロでプログラミングしていることを前提としています.32ビットプロセッサで組み込みLinuxを使用している場合、同じメモリ制約はありませんが、カスタムを処理する必要がありますLinuxディストリビューションがドライバーを提供しない周辺機器ハードウェア)

私はEEとCSの両方のバックグラウンドを持っているので、コインの両面を楽しんでいます。また、いくつかのWebプログラミング(主にPHP)、およびデスクトップアプリ(C#およびDelphi)も行いますが、組み込みプロジェクトでの作業を最も楽しんでいます。


ご回答有難うございます。制約は本当に気にしません。私は自分をソフトウェアエンジニアであり、電気技師ではないと考えています。「低レベルのプログラミング」は「高レベルの電気工学」と同じだと思いますか?
ジェレミーハイラー

32ビットおよびLinuxの観測用に+1-私はかつてテレコムで働いていましたが、スイッチハードウェアはAmiga(Motorla 68kプロセッサ)の簡易バージョンのコーディングのようなものでした。とても幸せな時間を過ごしました-時々見逃します。
ゲイリーロウ

3
@ジェレミー、はい、複雑な周辺機器の設定を把握しようとしているとき、またはスコープのシリアルビットストリームを見ているとき、低レベルのプログラミングをしているように見え、時には高レベルのように考えなければならないことがありますレベルEE。IDEのデバッガウィンドウ内のレジスタの内容を見るのに多くの時間を費やすかもしれません。そのレベルでは、ハードウェアを直接見ています。
tcrosley

20

@tcrosleyの答えは素晴らしいです。電気技師である必要はありませんが、基本を知ることは役立ちます。

「ソフトウェアスタックが低すぎる」ことを恐れる必要はないと思います。組み込みエンジニアとして、非常に興味深い多くの問題を解決しなければなりませんでした。楽しんだタスクのリストに言及します。

  • 並行アルゴリズム-非同期ハードウェアレベルの割り込みの処理には、OSスレッドモデルの使用と同じくらい多くの興味深い課題があります。

  • データ構造の設計-チェック。コンパクトで効率的なアクセスのための設計。

  • フレームワークの開発-チェック。必要最低限​​のシステムでは、ミニOSを設計することになります。

  • コンパイラを書く-おそらくそうではありませんが、コンパイラのアセンブリ生成ステップと同様に低レベルのコード最適化を行うことになります。

私はいつでもUIのコーディングよりも組み込みシステムで作業することを選びます。機械がプログラムした方法で動き始めるのを初めて見たときのことを決して忘れないでしょう。ピクセルをプッシュするよりも満足のいく方法です。


1対1マッピングAShellyをありがとう。組み込み作業環境については何も知らないので、それを知っておくとよいでしょう。
ジェレミーハイラー

6

組み込みプログラマーとしての私の仕事は、カスタムハードウェアを機能させることです。通常、開発ボードまたは以前のバージョンのハードウェアで多数のソフトウェアを開発しました。新しいボードが登場したら、私の仕事はソフトウェアをボードに載せて、すべてが機能することを実証することです。

ほとんど常に何らかの問題が存在するため、デバッグのスキルは不可欠です。外部周辺機器が機能しない場合、それは不良チップ、不良チップへの接続、バグのあるコード、またはオンチップ周辺機器の不正使用ですか?伝える唯一の方法は、広範囲にわたるデバッグを使用することです。これは、オシロスコープ、ネットワークアナライザー、ロジックアナライザー、およびターゲットデバッガーに慣れていることを意味します。デバッグプロセスはほとんど科学的になります。私は仮説を立て、仮説を立てるか否かに証拠を提供する実験を設計し、テストします。

インターンまたは新しい組み込みエンジニアを評価するとき、このスキルは最も重要です。すべてのソフトウェアには問題がありますが、物理世界とのインターフェースを開始すると、それらの問題の多様性は指数関数的に増加します。私の仕事の本質は、概念と現実の間の長い一連の問題を解決することです。


確かに、デバッグは個々の組み込みプログラマーにとって不可欠なスキルです。特に、PCB上のトラックに接続されたストレージスコープの表示を見て、組み込みソフトウェアの問題を診断するデバッグの種類です。:-)-ただし、組み込みソフトウェアエンジニアのチームの大きな利点は、高度なテストと品質管理の手法によりエラーを自動的にキャッチできることです。
ウィリアムペイン

5

私の経験では、「電子技術者」の帽子ではなく、「ソフトウェア開発者」の帽子を使って組み込みシステムソフトウェア開発に近づくと、より良い結果が得られます。(ハードウェアエンジニアリングでは、TDDやCIなどのプラクティスはあまり一般的ではありません)

一方、組み込みシステム向けに開発した経験は、それをより良くすると考えています。より充実したソフトウェア開発者。


2
まさにここに埋め込まれた開発者は、ソフトウェアがより複雑になっているので、業界はより多くのcsの人々をここに必要とします。
Bjarkeフロイント・ハンセン

組み込みソフトウェアの作成は、ソフトウェア開発者ができる最もやりがいのある(金銭的ではないにしても、知的に)仕事の1つであるため、CSの人々もそれを楽しむと思います。
ウィリアムペイン

3

私は約8年前に同様の状況にありました。その時点で、アプリケーションおよびサーバー環境での7年間のソフトウェア開発がありました。以前、ハードウェアを低レベルで扱った私の唯一の経験は、ZXスペクトルのティーンエイジャーとしてZ80アセンブラーで書いていたことです。

それは確かに挑戦でした。アセンブラーでチップセットを扱うのはとても楽しく、ハードウェアについて多くのことを学びました。私の役割のかなりの部分は、ソフトウェアを使用してハードウェアをテストすることでした。したがって、プログラミングに対処することを学び、ソフトウェアのバグが実際にハードウェアのバグであることを認識しました。実際には、バグがハードウェアであるかソフトウェアであるかを特定するために、ソフトウェアおよびハードウェアの担当者がかなりの労力を要することがあります。

配信に失敗した1つの側面は、デバイスドライバーの動作でした。私はこれを本当に理解したことはありませんでした。それは受け入れられた事実になりました。

オシロスコープとはんだ付けイオンに精通することが不可欠です。ハードウェアの人が26という数字を言うとき、彼は常に0x26が有用であることを意味することを思い出してください。ハードウェアエンジニアがソフトウェアを扱うのは非常にイライラすることがわかりますが、ソフトウェアを使用しないハードウェアプロジェクトはケーブルと呼ばれます。

私はその役割を4年間続けましたが、本当に素晴らしい機会を求めて密猟されたために去りました。


プトレマイオスの経験を共有していただきありがとうございます。それは有り難いです。
ジェレミーハイラー

最近では、多くのケーブルにもマイクロプロセッサが搭載されています。:
ウィリアムペイン

2

すべてと同様に、バランスの取れたアプローチが必要です。仕事で組み込みシステムを使用するのが大好きです。彼らは私を電気工学で良くします。物理コンピューティングと自動化は非常にエキサイティングです。一方、ウェブアプリを構築し、クラウドコンピューティングをいじるのは素晴らしいです。

あなたがそれを正しくすれば、あなたのソフトウェア側は、物事をより賢く、より良くする方法を探します。あなたのハードウェア側は、リソースを意識し、非常に効率的です。


ご回答有難うございます。下位レベルを学習し、スタックを少し上に戻す以外に、フィールドを少しシフトできると考えています。
ジェレミーハイラー

2

私は電気技師ではありませんが、組み込みソフトウェアの開発を少し行っています。私が見つけた最大の問題は、数学のはるかに基本的な背景があることです。そのため、高度な数学アルゴリズムの複雑なシリーズを、多くの助けを借りずに簡単にコードに分解する方法がわかりません。

シグナリングで遊んだり、入力から値を読み取ったり、出力にデータを送信したり、そのようなことをする必要のあるすべてのことについて、私は良いこととして日々やっていることと概念的には少し違うことがわかりました昔ながらのソフトウェア開発者。ソフトウェアを書くことは本当にそれが何であるかです。ハードウェアを直接いじる知識がないので、物事が危険にさらされていると感じるのは、実際のソフトウェアを超えて外出する必要があるときです。これは通常、コードをデバッグまたはテストしようとしたときに発生します。本当に素晴らしいツールチェーンを持っている場合、ほとんどの痛みを取り除くために統合されたデバッグおよびシミュレーション環境があるかもしれませんが、それでもあなたを助けるためにすべて、基本に戻ってコードをテストする必要がある場合がありますある種のアナライザーであり、実際には、ほとんどの組み込みプラットフォームは

この観点から、タスクが単純で、実際のハードウェア固有の要件が最小限である場合、電気工学者であることが組み込みプログラミングに不可欠であるとは思いません。それを超えて、EEであることは、組み込み環境で作業するとき、特に問題がどこにあるのかを解明するために実際の科学が必要なとき、人生をずっと楽にするだろうと思います。


「EEのウィジャボード」-素晴らしい、私はそれをよく知っている
マーティンベケット

2

私はビジネスレベルの組み込みプログラミングを行ったことはありませんが、私の学士号はほとんど組み込みシステムに関するもので、そこから数年の実際の経験があります。Atmel AVRでCを使用し、VHDLでいくつかのTexas Instrumentsチップに触れ、ARMでいくつかの理論的なものを持ちました。

私たちが持っていたものでは、プログラミング(C)が約50〜60%、計画/設計(UML)が20%で、残りは物理的な電子機器(はんだ付け、測定、配線、ケーブルの作成など)でした。私はそれがとても面白くて楽しかったことにも同意し、実際に組み込みシステムでのキャリアを持ちたいと思っています。残念ながら、組み込みシステムの市場は非常に小さいため、私は昔ながらのJava EEに頼らざるを得ませんでした。

しかし、私は脱線します。私たちの教師は独自の企業を持っているので、上記の割合は実世界の仕事に非常に近いと言います。プロジェクトの途中で要件がランダムに180度回転することさえありました。

スタックについては。組み込みプログラミングを知ることで、アジアの実際の工場で製造することができた独自の非常に現実的なハードウェア製品を作成し、それを自宅(自宅でも会社でも)で組み立てることができます。とても面白いです!また、移動制御されたハウスライト、朝のジョーを自動的に準備するコーヒーマシンのタイマーなど、自宅で役立つ多くのガジェットを作成することもできます。本当にエキサイティングなもの!

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