Lundinが述べたように、この質問には多くの異なる回答があります。バッテリ駆動の小さなメモリ搭載のベアメタル内蔵デバイスから、Linuxを実行するより複雑なシステムまであります。
まず、柔軟な開発者であることが非常に重要です。できるだけ早く変更に対応できる必要があります。今までに一度も経験したことのない言語で数週間でコンセプトプルーフのプロトタイプを作成したり、バグを素早く修正するために従来のプロジェクトで作業を開始する必要があるかもしれません。
ソフトウェアアーキテクチャの概念、RTOS、イベント駆動型システム(組み込みシステムは本質的に反応的です)、モデリングも(UML)について知っておくことは非常に重要です。たぶんテストドリブン開発(TDD)。これらは言語に依存しないもので、良いファームウェアを開発するのに役立ちます。
言語に関しては、Cは小規模システムと大規模システムの両方で使用されていると思いますので、C言語での優れた背景は必須です。ここで私は初心者レベルでのプログラミングについて話していません。私は、プロセッサーとコンパイラーが何をしているのかを知ることを話しています。あなたが言ったことによると、あなたはおそらくこれらのスキルを持っています。これはRAMとROMのすべてのバイトがカウントされる小さなシステムの場合に非常に役立ちます。 MISRA-Cルールについて知っていると、より安全なCコードを開発するのに役立ちます。
おそらく、自動テスト、データ処理、コード生成ツールなどを実行するにはスクリプトプログラミングが必要になるでしょう。私はこのすべてと、いくつかのLinuxシェルスクリプトをPythonで使用します。
PCベースのアプリケーションを設計できることは、生産ラインの組み込みデバイスをテストするためのテストフィクスチャを作成する場合や、組み込みデバイスがポケットUSBベースのオシロスコープのようなPCソフトウェアを必要とするだけの場合に便利です。この場合、クロスプラットフォームなのでQtを使用しますが、Windowsでのみ作業したい場合はC#でVisual Studioを使用できます。
組み込みシステムの場合は、ハードウェアのバックグラウンドが堅牢な方がよいでしょう。また、オシロスコープ、ロジックアナライザ、シグナルジェネレータなどを使用できる必要があります。ハードウェアの問題をソフトウェアで修正する必要があることがあります。
- C/C++での実践UMLステートチャート::)ここ
は、私は非常に便利冊の小さなリストです。
- UML Distilled。
- 組み込みシステムの作成。
- コンポーネントとしてのコンピュータ。
- Embedded Software Primer。
- 優れた組み込みシステムソフトウェア。
私はそれが役に立ちそうです。
フェルナンド
あなたの質問はあまりにも広すぎて閉鎖されることはありません。とにかく、経験則として、取得するハードウェアに近いほど、より一般的で幅広い知識が得られます。LinuxカーネルやAndroidカーネルについて知っていれば、まだアプリケーションレベルで作業しているので、特定のアプリケーションの専門家になるでしょう。一般的なハードウェア関連のCプログラミング、あらゆる種類のアセンブラ、エレクトロニクスを理解していれば、アプリケーションの性質に関係なく使用できるコアコンピタンスが得られます。 – Lundin
申し訳ありませんが、このサイトは、キャリアアドバイスやオープンエンドリストを求める質問ではなく、具体的な回答を持つ技術的な問題のためのサイトです。 –
レジスタを使って直接作業するまでは、埋め込みのことは分かりません:) –