2013-06-20 10 views
10

私は自分のキャリアにとって貴重なことを学ぶ必要があることのリストを作りたいと思います。あなたは遠く離れた将来、組込み開発者にはどんなスキルが不可欠だと思いますか?エンベデッドデベロッパー、どのスキルが重要か

私は、組み込みLinuxカーネルを使ってCとARMアセンブラにかなり熟練しています。私はLinuxドライバを掘り下げようとしています。しかし、私は多分私のスキルを絞り込むかもしれないと思うのを助けることができません。私は将来も組込みシステムを使いたいと思っていますが、あなたは雇用市場を知りません(私は中国とインドに委託するつもりです)。

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

しばらくの間、組み込みシステムで作業したことがある人は、組み込み開発者にとってどのスキル/言語が重要だと思っているのですか?私は自分のスキルだけを磨き続けなければならないのですか、新しいことを学ぶべきですか?

+3

あなたの質問はあまりにも広すぎて閉鎖されることはありません。とにかく、経験則として、取得するハードウェアに近いほど、より一般的で幅広い知識が得られます。LinuxカーネルやAndroidカーネルについて知っていれば、まだアプリケーションレベルで作業しているので、特定のアプリケーションの専門家になるでしょう。一般的なハードウェア関連のCプログラミング、あらゆる種類のアセンブラ、エレクトロニクスを理解していれば、アプリケーションの性質に関係なく使用できるコアコンピタンスが得られます。 – Lundin

+0

申し訳ありませんが、このサイトは、キャリアアドバイスやオープンエンドリストを求める質問ではなく、具体的な回答を持つ技術的な問題のためのサイトです。 –

+0

レジスタを使って直接作業するまでは、埋め込みのことは分かりません:) –

答えて

29

ここに私のリストです:

  • Cの必需品
  • OOP/C++ - クラス、カプセル化、ポリモーフィズム、オーバーライド/過負荷に、テンプレート
  • アルゴリズム - 検索、ソート、B-ツリー
  • デザインパターン - 工場、オブザーバー、シングルトンなど
  • リアルタイムオペレーティングシステムMS - プリミティブ(セマフォ、ミューテックス)、スケジューリング技術、ユーザー/カーネル空間
  • 、Linuxの基礎、ドライバ書き込み、
  • マイクロプロセッサの基本シェル - 割込み処理、レジスタ、アセンブリコード、等
  • マイクロコントローラの基礎 - ADCをDAC、タイマ、PWM、DMA、ウォッチドッグなど
  • メモリ - NOR、NAND、SRAM、DRAM、
  • 基本的なプロトコルのウェアレベリング - I2C、SPI、UART、LIN
  • 高度なプロトコル - SATA、PCIEを、 USB、CAN、MOST
  • Co並列/並列プログラミング - SMP用MPIなど
  • UMLクラス図、コンポーネント図、状態図、シーケンス図
  • スクリプト用のPerlまたはPython。単純なテキストファイルを変更する
  • JavaとAndroidの
  • 基本エレクトロニクス - 回路図の読み取り、オシロスコープ、マルチメータ、はんだごて例えば組み込みプログラミングのための
  • 専門技術を使用して、スイッチ、抵抗ラダースイッチ、ロータリーエンコーダなどのデバウンス。
  • ソフトウェアエンジニアリング - SDLC、CMMI、アジャイルメソッド。 SCRUM、バージョン管理(ClearCaseの、gitの、SVN)、バグトラッキング(JIRA?)、静的コードチェック、リント、ユニットテスト、継続的インテグレーション
  • ビルド環境 - メイク、cmakeの
  • 基本FPGA/ASIC設計、基本的なDSP
+0

これはまさに私が探していたものです!ありがとう、それは私が学ぶたくさんあるようだ:) – MrGigu

2

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

どのドメインで作業しているかは関係ありません(linux、vlsi、arm ....)。しかし、コードがハードウェア上でどの程度効率的に動作しているかが重要です。

あなたが本当に埋め込み世界で働きたいなら、あなたの道を見つけるでしょう。

6

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。
  • 優れた組み込みシステムソフトウェア。

私はそれが役に立ちそうです。

フェルナンド

+0

入力いただきありがとうございます!非常に良いアドバイス! – MrGigu

+0

1.コードアラインメントの方法を学びます。私が過去20年間に見た組み込み開発者のほとんどは、それをどうやって行うのか分かりません。 – zzz777

関連する問題