web-dev-qa-db-ja.com

組み込み開発者、どのスキルが重要か

私のキャリアにとって貴重な、学ぶ必要のある事柄のリストを作りたいと思います。組み込みの開発者、今、そして遠い未来に不可欠なスキルは何だと思いますか?

CとARMアセンブラーで組み込みLinuxカーネルを操作することでかなり熟達しました。これからLinuxドライバーに飛び込もうとしています。ただし、私のスキルはかなり高くなりました。今後も組み込みシステムを使い続けたいのですが、求人市場を知らないでしょう(私は中国とインドに外注するつもりです)。

私は現在C++とJavaにかなり弱いと感じています。また、Androidカーネルを将来的に学びたいと思います。スクリプト言語も知りません。

組み込みシステムでしばらく働いた経験のある人が、組み込み開発者にとって不可欠であると考えるスキル/言語についての情報を提供できますか? Cスキルだけを磨き続けるのか、それとも新しいことを学ぶべきなのか。

14
MrGigu

これが私のリストです:

  • Cエッセンシャル
  • OOP/C++-クラス、カプセル化、ポリモーフィズム、オーバーロード/オーバーライド、テンプレート
  • アルゴリズム-検索、ソート、Bツリー
  • 設計パターン-工場、オブザーバー、シングルトンなど.
  • リアルタイムオペレーティングシステム-プリミティブ(セマフォ、ミューテックス)、スケジューリング手法、ユーザー/カーネルスペース
  • Linuxの基礎、ドライバー作成、シェル
  • マイクロプロセッサの基礎-割り込み処理、レジスタ、アセンブリコードなど.
  • マイクロコントローラの基礎-ADC、DAC、タイマー、PWM、DMA、ウォッチドッグなど.
  • メモリ-NOR、NAND、SRAM、DRAM、ウェアレベリング
  • 基本プロトコル-I2C、SPI、UART、LIN
  • 高度なプロトコル-SATA、PCIE、USB、CAN、MOST
  • 並行/並列プログラミング-MPI for SMPなど).
  • UML-クラス図、コンポーネント図、状態図、シーケンス図
  • PerlまたはPythonスクリプト用、たとえば単純なテキストファイルを変更するため。
  • JavaとAndroid
  • 基本的な電子機器-オシロスコープ、マルチメーター、はんだごてを使用した回路図の読み取り
  • 組み込みプログラミングのための特殊なテクニック。スイッチ、抵抗ラダースイッチ、ロータリーエンコーダーなどのデバウンス.
  • ソフトウェアエンジニアリング-SDLC、CMMI、アジャイル手法(例: SCRUM、バージョン管理(ClearCase、git、svn)、バグ追跡(JIRA?)、静的コードチェック、Lint、単体テスト、継続的統合
  • ビルド環境-makefile、cmake
  • 基本FPGA/ASICデザイン、基本DSP
31
ruben2020

ランディンが述べたように、この質問は多くの異なる答えに開かれています。バッテリ駆動のメモリに制約のあるベアメタルの組み込みデバイスから、Linuxを実行するより複雑なシステムまで、さまざまなものがあります。

まず、柔軟な開発者であることは非常に重要です。変更にできるだけ迅速に適応できる必要があります。これまでに使用したことのない言語で数週間で概念を実証したプロトタイプを作成したり、レガシープロジェクトで作業を開始してバグをすばやく修正したりする必要があるかもしれません。

ソフトウェアアーキテクチャの概念、RTOS、イベント駆動型システム(組み込みシステムは本質的にリアクティブです)、およびモデリング(UML)について知ることは非常に重要です。たぶんテスト駆動開発(TDD)。これらは言語に依存しないため、最初から優れたファームウェアを開発するのに役立ちます。

言語に関しては、Cは小規模システムと大規模システムの両方で使用されていると思うので、Cの優れた背景を持つことは必須です。ここでは、初心者レベルのCプログラミングについては話していません。私は、プロセッサとコンパイラが舞台裏で何をするかを知っていることについて話している。あなたが言ったことによると、あなたはおそらくこれらのスキルを持っています。これは、RAMおよびROMのすべてのバイトがカウントされる小さなシステムの場合に非常に役立ちます。MISRA-Cルールについて知っておくと、開発に役立ちますより安全なCコード。

おそらく、自動テスト、データ処理、コード生成ツールなどを実行するには、いくつかのスクリプトプログラミングが必要になります。これにはすべてPythonを使用します。また、いくつかのLinuxシェルスクリプトも使用します。

PCベースのアプリケーションを設計できることは、製造ラインの組み込みデバイスをテストするためのテストフィクスチャを作成する場合、またはおそらく組み込みデバイスが動作するためのPCソフトウェア(ポケットUSBベースのオシロスコープなど)を必要とするだけの場合に役立ちます。この場合、クロスプラットフォームなのでQtを使用しますが、Windowsでのみ作業したい場合は、C#でVisual Studioを使用できます。

組み込みシステムの場合、ハードウェアのバックグラウンドがしっかりしている方が良いでしょう。また、オシロスコープ、ロジックアナライザ、信号発生器などを使用できる必要があります。ソフトウェアでハードウェアの問題を修正する必要がある場合があります。 :)

ここに私が非常に役立つと思う本の小さなリストがあります:

  • C/C++での実用的なUMLステートチャート。
  • UML蒸留。
  • 組み込みシステムの作成。
  • コンポーネントとしてのコンピュータ。
  • 組み込みソフトウェア入門書。
  • 優れた組み込みシステムソフトウェア。

お役に立てば幸いです。

フェルナンド

7
Fernando

選択するドメインが何であれ、Cプログラミングだけでなく、ハードウェアにも精通している必要があります。

作業しているドメイン(linux、vlsi、arm ....)は関係ありません。ただし、コードがハードウェア上でどれほど効率的に実行されているかを確認してください。

組み込みの世界で本当に働きたいのなら、あなたは自分の道を見つけるでしょう。

2
Kapil Chittewan