15

ゼネラリストとしてのバックグラウンドがあるため、アナログ エレクトロニクスから RDBMS バックエンドに接続する単純なアプリケーションの作成まで、多くの分野をカバーできます。

私は現在、業界固有の問題を解決するハードウェアを開発する会社で働いています。私たちには、ビジネス アプリ、ビデオ ゲーム、その他 PC 向けのさまざまなものを作成した経験豊富なプログラマーがいます。しかし、私が低レベルのプログラミングを行うことについて彼に話すと、彼は同時にプロジェクトに参加することに興味を示すと同時に、疑問/不確実性も表明します。

PC について話すときでさえ、彼は低レベルのもの (命令セット、ISR) よりも言語レベルでの操作に慣れているようです。それでも、彼は賢い人で、最初の学習のこぶを乗り越えたら、仕事を楽しんでくれると思います。しかし、それは低レベルの話をすることに対する私自身の熱意かもしれません... 彼が本当に興味を持っていれば、彼はすでにその方向のことを学び始めていたのでしょうか?

ソフトウェアからハードウェア (または低レベルのソフトウェア) への移行の経験はありますか? それとも、ソフトウェアのみの人を採用して、彼を低レベルのものに移行させたほうがよいでしょうか?

編集:

PS 回答者のバックグラウンドを知りたいです。EE、CS、両方ですか?

4

17 に答える 17

16

結局のところ、すべてが API です。

マイクロコントローラ内の SPI ペリフェラルのコードを記述する必要がありますか? データシートまたはハードウェア マニュアルを入手して、SPI ペリフェラルを調べてください。これは 1 つの大きくて複雑な API です。

問題は、API の意味を理解するために、ハードウェアといくつかの基本的な EE の基礎を理解する必要があることです。データシートは SW 開発者によって、また SW 開発者のために書かれたものではなく、ハードウェア エンジニア、そしておそらくソフトウェア エンジニアのために書かれたものです。

つまり、すべてハードウェアの観点からのものです (それに直面してください。マイクロコントローラー会社は、ハードウェア/ASIC エンジニアでいっぱいのハードウェア会社です)。

つまり、移行は決して単純で簡単ではありません。

しかし、それは難しいことではありません。ドメインが少し異なるだけです。学習プログラムを実施できる場合は、Rabbit Semiconductorのキットから始めてください。そこにはソフトウェアが十分にあるので、SW 担当者はほとんど労力をかけずに掘り下げることができます。HW は、すべてが素敵な小さなライブラリにラップされているため、扱いが簡単です。複雑なことをしたいときは、ハードウェアへの直接アクセスを掘り下げて下位レベルをいじることができますが、同時に、小さなWeb サーバーの構築やネットワーク カメラのパン/チルトなど、かなりクールなことも実行できます。同様のサービスを提供する企業は他にもありますが、Rabbit はハードウェアをソフトウェア エンジニアにとって使いやすくすることに重点を置いています。

または、それらを Android プラットフォームに取り込みます。彼らが何か面白いことをしたいと思うまでは、それは UNIX システムのように見えます。そして、彼らはその小さな問題に取り組みたいという欲求を持ち、ハードウェアについて学びます。

深く掘り下げたい場合は、arduino キットを使用してください。安価で無料のコンパイラとライブラリを使用すると、簡単に始めることができますが、興味深いことを行うにはワイヤを接続する必要があり、大きすぎる可能性があります。気が進まないソフトウェアエンジニアにとってのハードル。しかし、少しの助けと正しい方向へのいくつかのナッジがあれば、彼らはナイトライダーのライトのように揺れる*小さなLEDディスプレイを手に入れることに絶対に興奮するでしょう...

-アダム

*はい、技術工学用語です。

于 2008-10-23T21:26:51.920 に答える
9

私が一緒に仕事をした中で最高の組み込みプログラマーは、EEの訓練を受け、仕事でSWを学んだことです。最悪の組み込み開発者は、SWが問題を解決する唯一の方法であると考える最近のCS卒業生です。私は組み込みプログラミングをSWピラミッドの底辺と考えるのが好きです。これは、アプリ開発者の生活を楽にする安定した抽象化レイヤー/基盤です。

于 2008-10-24T00:01:20.860 に答える
6

「ハード」は非常に相対的な用語です。小さな埋め込みコードに必要なタイトで複雑な方法で考えることに慣れている場合 (たとえば、ドライバー開発者の場合)、それは確かに「難しい」ことではありません。

シェル スクリプト作成者を「バッシング」する (しゃれは意図しない) ためではありませんが、perl とシェル スクリプトを 1 日中書くと、「大変」になる可能性があります。

あなたが Windows の UI 担当者である場合も同様です。それは別の種類の考え方です。

于 2008-10-23T21:15:03.007 に答える
5

組み込み開発が「難しい」理由:

1) 各機械語命令の間で、コンテキストが割り込みに切り替わる場合があります。高水準言語構造は複数のアセンブリ命令にマップされる可能性があるため、これはコード行内にある場合もあります (例: long var = 0xAAAA5555)。割り込みサービス ルーチンでアクセスした場合、16 ビット プロセッサでは、var は半分しか設定されない可能性があります。

2) システムへの可視性が制限されています。自分で書かない限り、Hyperterm への出力さえないかもしれません。エミュレーターは常にうまく機能するとは限りません (ただし、以前よりもはるかに優れています)。オシロスコープとロジック アナライザーの使用方法を知っている必要があります。

3) 操作に時間がかかる。たとえば、シリアル トランスミッタが割り込みを使用して、別のバイトを送信する時間になったことを知らせるとします。送信バッファに 16 バイトを書き込み、割り込みをクリアして、メッセージが送信されない理由を考えることができます。一般に、タイミングは組み込みプログラミングの難しい部分です。

4) まれにしか発生せず、デバッグが非常に困難な微妙な競合状態の影響を受けます。

5) マニュアルを読む必要があります。多くの。ふざけていてはうまくいきません。場合によっては、目的を達成するために 20 のことを正しく設定する必要があります。

6) ハードウェアが常に機能するとは限らないか、損傷しやすく、壊れたことに気付くまでに時間がかかります。

7) 組み込みシステムのソフトウェアの修理は通常、非常に高価です。Web ページを更新するだけではありません。リコールは、デバイスで得た利益をすべて消去する可能性があります。

おそらくもっとありますが、この競合状態を解決する必要があります...

于 2013-10-01T19:49:58.043 に答える
4

これは非常に主観的なものだと思いますが、彼の理由はたくさんあります。でも、もし彼が私のような人なら、彼がどこから来たのか知っています。説明させてください。

私のキャリアでは、通信業界に 6 年間専念しており、SDK ミドルウェアをローエンドの携帯電話などに埋め込む作業に多くの時間を費やしてきました。

私が経験したほとんどの組み込み環境は、プログラマーにとって厳しい天候のようなもので、リソースの制限などを常に克服しなければなりません。これを挑戦だと感じ、挑戦自体を楽しんでいる人もいれば、「本物」に近いと感じる人もいます。クリエイティビティが制限されていると感じる人もいるかもしれません。

私はそれが私の創造性を制限していると感じるタイプです.

私は Windows デスクトップ環境に戻ることを楽しんでおり、精巧なクラス デザインで翼を羽ばたかせたり、足を数クロック サイクル余分に伸ばしたり、診断に不必要な量のメモリを使用したりしています。

過去の特定の組み込みユニットでは、fseek() (ANSI C 標準ファイル関数) をほとんどサポートしていませんでした。運が良ければ、「ウォッチドッグ」が何かがクラッシュした場所の手がかりを提供してくれるかもしれません。シングルスレッドのプリエンプティブな沼地でユーザーと通信することの苦痛は言うまでもありません。

まあ、あなたは私が何を得ているか知っています。私の意見では、それは必ずしも難しいことではありませんが、現在の経験を再利用する可能性がほとんどない、かなりの飛躍です.

よろしく

ロバート

于 2008-10-23T21:35:45.133 に答える
3

彼は低レベルのものに慣れている必要がありますが、主にデバッグとフィールドの問題のためです。アーキテクチャによっては深刻な学習曲線がありますが、不可能ではありません。一方、低レベルのコードは、高レベルのコードよりも(一般的に)多くの時間とデバッグを必要とします。したがって、常に低レベルに戻る必要がある場合は、設計に問題がある可能性があります。私が構築した組み込みコントロールの場合でも、私は大部分の時間を高レベルのコードに費やしています。問題がある場合でも、非常に優れた低レベルの知識があると非常に有利です。

于 2008-10-24T03:32:04.150 に答える
3

私は EE に転向したソフトウェア エンジニアです。私は低レベルのプログラミングを好みます。私が知っている古典的な訓練を受けたほとんどのソフトウェア開発者は、API を呼び出す必要があるこのレベルでの操作を望んでいません。したがって、私にとってはウィンウィンです。使用する低レベルのドライバーと API を作成します。コンピュータエンジニアと呼ばれる、少なくとも私が大学に行って以来、「新しい」学位があります。うーん、コンピューター サイエンスではなく電気工学の学位かもしれませんが、ソフトウェアとデジタル ハードウェアの基礎が見事に組み合わされています。私がこの分野で一緒に仕事をした人たちは、低レベルの方がずっと快適です。

個人が快適ではない、または意欲がない場合は、快適な場所に置きます。ドキュメンテーションやユーザー インターフェースの作業を任せてください。会社でのすべての仕事が低レベルの仕事を必要とする場合、この個人はそれを行うか、別の仕事を見つける必要があります. 砂糖でコーティングしないでください。

また、こぶを乗り越えれば、オペレーティング システムに妨げられない、そのレベルの自由度などを楽しむことができると思います。プロセッサ内のすべてのネットおよびその他のオンチップ ペリフェラル。いいえ、メモリの現在の状態を示す gui (デバッガー) にテーブルはありません。メモリ バスを見て、関心のあるアドレスを探し、読み取りまたは書き込み信号とデータ バスを探す必要があります。シリコンが到着し、このレベルの可視性が失われる日が心配です。デトックス中毒者のようになります。

于 2009-05-18T02:16:13.200 に答える
3

ユーザーレベルのアプリケーション開発 (つまり、汎用 PC または Web アプリケーション) から、ハード デッド デッドのリアルタイム レスポンス アプリケーション開発 (つまり、ハードウェア/ソフトウェア インターフェイス) まで、考え方には非常に大きな違いがあります。

割り込み、命令セット、コンテキスト切り替え、ハード リソースの制約は、平均的な開発者にはあまり知られていません。ここで、あなたの「平均的な開発者」は、訓練を受けた電気/電子またはその他のエンジニアではないと仮定しています。

あなたが言及したこの開発者の移行は、彼の快適ゾーンをはるかに超えている可能性があります。私たちの中には、そのようなストレッチが好きな人もいます。私たちの中には、その景色は登る価値がないと判断した人もいるかもしれません。

同様に、ハードウェア分野に携わってきた人 (つまり、エンジニア) は、ソフトウェア開発の前提条件や言語に苦労することがよくあります。

もちろん、これらは大まかな一般論ですが、うまくいけば、いくつかの洞察を得ることができます.

于 2008-10-23T21:29:58.590 に答える
2

ええと、14歳でPopular Electronicsを読み始めたとき、私はハードウェアに歯を食いしばりました。これは、あなたが疑問に思っていた場合に備えて、とにかく体調が悪い場合に備えて、パーソナルコンピュータの前でした。笑

私は8048/51マイクロプロセッサで低レベルのビットバンを実行し、PICやその他のシングルチップのバリエーション、そしてもちろんRabbitSemiconductorを実行しました。(Cに興味がある場合は素晴らしいです)。それは素晴らしい(そして楽しい)ものです。はい、物事を見る別の方法があります–難しくはありませんが、ソフトウェアの問題ほど議論されていないため、その情報の一部を入手するのは少し難しいです。(もちろん、これはあなたが関連付ける友達の輪に依存します、ええ)。

しかし、これらすべてを述べた上で、プログラマーのギャップをハードウェアの世界に埋め始め、それ以来非常に主要なプレーヤーになり、それが.NETマイクロフレームワークであるテクノロジーを思い出させたいと思います。このテクノロジーに関する情報は、次の場所にあります。

http://msdn.microsoft.com/en-us/embedded/bb267253.aspx

これは、新しい環境で既存のPCベースの知識の一部(実際にはかなり)を使用できるという点で、.NET Web開発が対処したのと同じ問題のいくつかに対処します。もちろん、ターゲットマシンは使用しないため、注意が必要です。 4 GIGのRAMを搭載– 64K(またはそれ以下)しか搭載できない場合があります

.NET microフレームワークのバージョン2.5以降、ネットワークおよびWebサービスにアクセスできるようになりました。それだけではありません…あなたの家の照明を制御したいですか?臨時録音局はどうですか?すべてあなたがすでに持っているスキルを持っています。まあ、ほとんど-リンクをチェックしてください。

SDKはVisualStudioIDEにプラグインします。非常にリーズナブルな金額で利用できる「開発キット」が多数あります。これで、通常はコンポーネントの学習曲線が大きくなり、回路基板の構築と「もの」の配線を開発キットでかなり簡単に行うことができます。そして、いくつかの非常に単純なコード–もちろん、時々ビットバン操作を行う必要があるかもしれませんが、ますます多くのセンサー関係者が.NETマイクロフレームワークドライバーを提供しています–したがって、ハードウェア開発はあなたが思っているよりも近いかもしれません…

それが役に立てば幸い...

于 2008-11-11T03:04:48.430 に答える
1

低レベルの組み込みプログラミングには、低レベルのデバッグも含まれる傾向があります。(私の経験では)通常、(少なくとも)オシロスコープの使用が必要です。あなたの同僚が、少なくともある程度の時間をハードウェアと物理的に接触し、マイクロ秒とボルトの観点から考えることに満足しない限り、私はそれらをそのままにしておきたいと思います。

于 2013-03-27T10:33:53.120 に答える
1

私は両方好き。組み込みは私に挑戦し、本当に本能的な方法で私をやる気にさせます。マクロ物理世界に影響を与えるものを作ることは、非常に満足のいくものです。しかし、私の学士号はコンピューター サイエンスにあるため、電気/電子工学の分野で多くの追いつく必要がありました。私は、AI、グラフィックス、コンパイラ、自然言語などを学んだかなりジェネラリストのバックグラウンドを持っています。現在は、組み込みシステムの大学院の仕事をしています。本当に難しいのは、オペレーティング システムのようなランタイム機能の欠如に適応することです。

于 2008-10-23T22:32:56.327 に答える
0

「しかし、私が彼に低レベルのプログラミングをすることについて話すとき、彼は同時にプロジェクトに参加することについて興味と疑い/不確実性を表明します。」-つまり、彼に試してもらい、彼が学習曲線に合格しなかった場合に備えて、他の誰かを雇う準備をします。

于 2008-10-24T00:03:00.687 に答える
0

私は SW エンジニアとして始めました。今は HW エンジニアです。重要なのは、それがどのように機能するかを理解し、やる気を起こさせることです!

于 2013-03-26T14:55:02.763 に答える
0

それは、彼らが選択した環境でのプログラミング方法と、あなたが話している組み込み作業のタイプに依存すると思います。

たとえば、組み込み Linux プラットフォームで作業することは、オペレーティング システムがまったくない 8 ビット プラットフォームでコードを記述しようとする場合よりもはるかに小さなジャンプです。

彼らが慣れ親しんだAPIと環境の下で何が起こっているかを理解しているタイプの人であれば、組み込み開発に移行するのはそれほど難しいことではありません.

しかし、彼らの世界観が今まで使ってきた高水準のAPIにとどまり、その下に何もないという概念がなければ、彼らは本当に苦労することになるでしょう。

(非常に)一般的なステートメントとして、彼らがマルチスレッド アプリケーションでの作業に慣れている場合は、組み込みプロジェクトで作業する場合と同じデータの揮発性の問題をいくつか共有しているため、おそらく大丈夫でしょう。

そうは言っても、PC 開発で成功を収めている組み込みプログラマーは、私が逆の場合よりも多く見てきました。(もちろん綺麗な断面は見ていないかもしれませんが)

于 2008-10-23T23:16:53.320 に答える
0

「難しい」という用語に同意するのはかなり相対的です。

他の種類の環境では使用しないさまざまな開発パターンを採用する必要があるため、異なると言えます。たとえば、時間の制約には学習曲線が必要になる場合があります。でも好奇心旺盛なのは開発者としての資質ではないでしょうか。

于 2008-10-23T21:34:39.253 に答える
0

ある分野で完全に迷子にならないように十分な知識を持っている人なら誰でも、何か新しいことを学ぶという挑戦を楽しむことができるという点で、あなたは正しいです。

環境で快適に感じるために必要な膨大な量の背景知識があるため、私自身、命令セットなどのレベルに移行することは非常に緊張します.

これを行う方法を学ぶ際に開発者をサポートできる場合、違いが生じる可能性があります。質問したり、問題について話したりできる人がいることは、その種のドメイン変更において大きな助けになります。

最初のステップとして、開発者を他の人たちと一緒に小さなプロジェクトに割り当てて、それがどうなるか見てみる価値があるかもしれません。彼が別のプロジェクトに挑戦したいという熱意を表明した場合、物事はそこから流れていくはずです。

于 2008-10-23T21:40:32.347 に答える
0

難しいことではなく、別の知識セット、別の考慮事項が必要なだけです。

于 2008-10-23T22:08:18.483 に答える