日常の機械はどのようにプログラムされていますか?


147

日常の機械(電化製品やデジタル時計など、コンピューターやモバイルデバイスではない)はどのようにプログラミングされていますか?コカコーラの自動販売機のプログラミングにはどのようなコードが含まれますか?私のコーヒーメーカーは、事前にプログラムされた時間をどのように受け入れ、その時間が到着した後、コーヒーのポットの醸造をどのように開始しますか?

これらの種類のマシンは内部にオペレーティングシステムを持っていますか、それとももっと基本的なものですか?彼らはアセンブリ、C、または他の言語で書かれていますか?

そして、これらのオペレーティングシステムまたは基になるコードシステムをリストするリソースを見つけたいと思います。できれば、ソースコードを使用することもできます。誰かがそのようなリソースを知っている場合(検索しても何も得られなかった)、それは素晴らしいことです。


12
素晴らしい質問です!私自身も同じことを考えていました。
ジョナサンスターリング

7
「組み込みシステム」でいくつかの検索/研究を行います(私はあなたのためにタグを追加しました)。
muが短すぎる

InReの最終投票:これはプログラミングに関するものので、プログラマー向けの資料とは見なしません。一方で、エレクトロニクスSEサイトではうまくいくかもしれません。専門家が増えるので簡単です。もちろん、答えは上記のすべての一部です。回答を1つ得る前に、少人数のクラスを選ぶ必要があります。
dmckee ---元モデレーターの子猫

非常に幅広い質問で、少なくとも3つの工学分野とその間の多くの色合いをカバーしています。
ジョドレル2011

FWIW、あなたはArduino(〜$ 30)arduino.ccのようなマイクロコントローラープラットフォームで遊ぶことに興味があるかもしれません。
蒸し器

回答:


47

あなたが話していることのほとんどは、Cがしばしば利用できない贅沢である組み込みベースのシステムです。彼らは伝統的な意味でのソフトウェアを持っていません。ほとんどの場合、ソフトウェアはC、アセンブリ、またはマシンコードで書かれています。CおよびASMでは、そのプラットフォームでそれらを使用するようにコンパイラーを作成する必要があります。マシンコードは、コンパイラなしのバイナリとして記述されます。

コーヒーポットとそのような最も単純なシステムは、オペレーティングシステムを搭載していません。それらは単にメモリの開始アドレスからロードし、そこにコードを配置します。多くの場合、これらのシステムでは、システムのハードドライブとして機能するEEPROMに「コード」が書き込まれています。プロムを焼いた後にコードを台無しにし、チップを捨ててチップ上のコードを再焼いて、やり直します。ハイエンドデバイスがテスト、展開などを容易にするために使用する新しいチップFPGAがありますが、それらは同じものです。

コカコーラマシン、ルーターなどは、通常、QNX、EMBOSなどのリアルタイムOSを使用します。運が良ければ、RTlinuxを使用することもあります。これらのほとんどは、多額のライセンスを取得した独自のOSですが、Cコンパイラ、ハードウェアで動作するドライバなどを備えています。

http://www.qnx.com/

http://www.segger.com/cms/embos.html

http://www.microsoft.com/windowsembedded/en-us/campaigns/compact7/default.aspx?WT.srch=1&WT.mc_ID=SEARCH

RTLinux


35
バイナリでコーディングしている人は?アセンブラーはとても簡単に書くことができないので、信じられません。これのソースはありますか?また、この答えは、すべてのシステムにコードを実行するマイクロプロセッサが含まれているという誤った印象を与えます。これは、マイクロコントローラーとEEPROM(デバッグとアップグレードを容易にする)が安価になるにつれて人気が高まっていますが、非常に安価なシステムや、過去20年間あまり変更されていないシステムにはまだ価値がありません。たとえば、一部のデジタル時計。
BlueRaja-Danny Pflughoeft、2011

6
これは単純に強すぎます。ターゲットでコンパイラをホストする必要はありません。組み込みコンパイラーではクロスコンパイラーが非常に一般的です。
dmckee ---元モデレーターの子猫

12
QNXを実行するコークスマシン?WTF-それは別の種類のコークスです!そしてはい、現在量産されているすべての単一プラットフォーム用のCコンパイラがあります。誰もアセンブリを書きたくないので、Cの欠如は大きなハンディキャップになるでしょう。(一部のコンパイラはあまり良くありません、当然です。)
Potatoswatter '12

8
また、EEPROMは、定義により100000回以上書き換えることができます。追記型メモリは時代遅れです。今日人気のあるすべてのマイクロコントローラーはフラッシュを搭載しています。FPGAはローエンドMCUとはまったく異なる市場です...何を話しているのかわかりません。
Potatoswatter

7
非常に複雑な自動販売機に取り組んでいる友人がいます。セルラーラジオを備え、在庫を監視し、温度を追跡し、財務数値を報告し、サーバーにHTTP呼び出しを送信してこのデータをすべて集約し、すべてのマシンで追跡できるようにします。はい、これらのブランドのマシンは組み込みOSを使用しています。私は彼らがCを使用してRTLinuxを使用していると思います。そのため、低価格の自動販売機でさえ、組み込みOSを保証するのに十分なほど複雑になっています。
chubbsondubs 2011

29

彼らはマイクロコントローラを使用し、8051は古典的なものです。これらは8ビットまたは16ビットのコアであり、オペレーティングシステムはほとんどありません。プログラマーは、オンボード周辺機器を初期化し、割り込みハンドラーを実装するコードを記述します。使用される言語はアセンブリとCです。タフなデバッグジョブにはインサーキットエミュレータが必要です。

LinuxやJava JVMの組み込みバージョンを起動する32ビットの組み込みコア(ARMは100ポンドのゴリラ)を使用することで、これ以外にも多くの余地があります。


5
それはかなり小さなゴリラですが、埋め込まれた大きな類人猿では、電力の制約がかなり重要だと思います;)
Piskvorは、

ありがとうございました!あなたの答えは私にとって役に立ち、私はあなたに賛成票を与えました。
Josh Leitzel

ARMチップもローエンドに入りつつあります。価格は1米ドル未満、設置面積は2x2mmです。
ドーメン

24

これらは組み込みシステムであり、Cやアセンブリなどの非常に低レベルの言語を使用してプログラムされます。一般に、このようなシステムはオペレーティングシステムなしで実行されますが、ブルーレイDVDプレーヤーやワイヤレスルーターなどの一部の新しい「日常のマシン」は、UNIXベースのオペレーティングシステム上でコードを実行します。


更新

他の人が言ったことに沿って、多くの現代の組み込みシステムもウィンドウのフレーバーを実行します。それはアプリケーションに依存します。また、オペレーティングシステムを備えたより強力なプラットフォームで実行したり、Javaを実行する必要があるBlue-rayプレーヤーなどのケースを処理したり、エンドユーザーがより多くの機能を必要とするその他のインスタンスを処理したりする傾向が多くのスペースで見られます。


明確にするために、BlurayはJavaを使用しています。
Andrew Marshall

6
おそらく、実際のプレイヤーはLinuxを実行し、C / C ++で書かれています
Justin Ethier

レジやガスポンプなどはdos(一部のブランド)を実行していましたが、残念なことに、これらの一部は現在実行ウィンドウ(食料品店または他のセルフチェックアウトライン)です。あなたがあなたのガスをポンピングしている間、テレビ番組があなたに鳴り響き、そうでないときに画面上でバローニーを踊りたいという欲求は、より多くの馬力につながりました。同様に、2軸グラバーを備えたコークスおよび水機械。
old_timer

@Justin、もちろんそうです、Javaは機能するために何かの上に座る必要があります。私の要点は、Javaのような(比較的)高級言語を利用しているということでした。
アンドリューマーシャル

@Andrew:ブルーレイのJavaインタープリターはどのオペレーティングシステムで実行されますか?そして、そのオペレーティングシステムはどの言語で書かれていますか?
Gunther Piez

18

デスクトップのプロセッサについて考えてみましょう。それが行うことは、マシン命令を実行することだけであり、それ自体では、「オペレーティングシステム」や「プログラム」についてはあまり心配していません。

コンピュータの電源を入れると、プロセッサは最初の命令を指し、実行を開始します。

デスクトップで、「オペレーティングシステム」の実行を開始します。ただし、選択した命令セットをプロセッサで実行できなかった理由はありません。(結果を画面に出力する必要があり、その機能はOSにあるため、これはあまり役に立ちません。)同時に、プロセッサが出力するようにマシン命令が適切なオペコードで構成されている場合モニターに絵を描くための正しい信号のシーケンス、すべてがより良いです。OSは必要ありません。

デスクトップは非常に多くのことを行うため、通常はOSの抽象化が必要です。しかし、そのコアでは、プロセッサが実行するのは命令を実行することだけです。

コーラマシンとコーヒーマシンのプロセッサについても同じです。命令を実行するだけです。

まあ、機械語命令を少しずつ書くのは面倒です。したがって、デスクトップの場合と同様に、通常はCでコードを記述し、それをコンパイルしてマシンコードにコンパイルします。そのマシンコードが組み込みプロセッサにロードされ、実行されます。

組み込みシステムはほとんど機能していないため、完全なOSを必要としません。マイクロコントローラーは、通常のCPUソケットのピンの数と比較して、チップ上に8本または16本のピンを備えている場合があります。

したがって、ワークフローはコードを(たとえば、Cで)作成し、デスクトップマシンでコンパイルします。そのコンパイラーは、組み込みチップ用のマシンコードを生成します。次に、そのコードがマイクロプロセッサにロードされます(これを行うには特別なハードウェアが必要です)。次に、チップに電源を入れると、命令の実行が開始されます。シンプル!


2
どうもありがとうございます!私が別のベストアンサーを選択できたとしたら、それはあなたの答えだったでしょう。とても重宝しました。+1
ジョシュライツェル

最近のプロセッサは、オペレーティングシステムに驚くほど関心を持っています。これらは、メモリ管理ユニット特権付きの命令とモードハードウェア仮想化などの機能を提供します。最新のオペレーティングシステムは、これらの機能のいくつかに依存しています。これが、小さなマイクロコントローラでLinuxを(簡単に)実行できない理由です。
Mira Weller、

12

特定の機能を実行する多くのデバイスには、「コード」が含まれていません。彼らは、電子部品の特性を介して機能を実行します。多くの異なる機能を実行できる、または簡単にアップグレードできる必要があるより高度なシステムには、マイクロコントローラとある種の「オペレーティングシステム」が含まれます。これらはまだ機能にいくつかの制限があるため、オペレーティングシステムはシンプルで特別に設計されます。さらに高度になると、デバイスにはコンピューターに似たものが含まれます。システムのさまざまな部分と通信できる、より複雑なオペレーティングシステムになります。最後に、スマートフォンなどのデバイスに到達します。このデバイスには、ユーザーレベルのコードを実行できる完全なオペレーティングシステムが含まれており、単純なデバイスよりもはるかに多くのユーザー入力があります。しかしながら、現代のプロセッサでさえ、本質的に非常に大きな電気回路です。CPUが認識するすべての命令により、その機能を実行するために異なる回路が使用されます。

興味のあるウィキペディアのページをいくつか紹介します。

http://en.wikipedia.org/wiki/Electrical_engineering
http://en.wikipedia.org/wiki/Integrated_circuits
http://en.wikipedia.org/wiki/Electronic_engineering
http://en.wikipedia.org/wiki / Computer_engineering
http://en.wikipedia.org/wiki/Microcontroller


これは間違っています。低コストのチップのコストの主な要因は、シリコンを搭載するパッケージです。このため、数十個程度のゲートに到達すると、ディスクリートロジックをマイクロコントローラーに置き換える方が安上がりです。MCUの普及により、ディスクリートゲートのコストが上昇し、バランスが変化しています。また、ほとんどのローエンドMCUは、いかなる種類のオペレーティングシステムも実行しません。
Potatoswatter

7

これは非常に広範な質問であり、マシンに大きく依存します。これらの自動販売機の大部分はマイクロコントローラー(8051、PIC、ARM7、最もよく使用されているものの名​​前を挙げます)によって制御され、OSはめったにありません。FreeRTOS

DVD / BluRayプレーヤーや携帯電話などのより複雑なマシンは、OMAP4などの高度なプラットフォーム上で実行されます。通常、Unix OSが動作します。


お返事ありがとうございます!+1
Josh Leitzel

7

日常のアプライアンスに見られるローエンドマイクロコントローラーは、通常、オペレーティングシステムを実行しません。それらは低コストで選択され、そのコストを左右する主な要因は、チップ上のピンの数(数十から数百)と内部のメモリの量(数キロバイトから数メガバイトのROM、数個から)バイトから100キロバイトのRAM)。

機能クリープが魔法をかけるので、マイクロ波がマルチタスクを必要とする場合があります。この場合、プログラマーはオペレーティングシステムのコースを呼び戻し、必要に応じてメッセージパッシング、タスクスケジューリング、非同期I / Oなどを実装します。

もちろん、便宜上、単純さ、コードサイズなどのために、機能は基本的な方法で行われる傾向があります。多くの場合、プログラムをどのように分析するかによって、タスク固有のコード内で一般化されたOS機能を見つけることができます。しかし、これはハードコードされたタスクスケジューラからオペレーティングシステムまでの長い道のりであり、数キロバイトしか操作できない場合、既製のOSはソリューションではありません

人気の電子部品選択サイトであるDigiKeyを見て、ローエンドMCUについて学んでください。これは、コーヒーマシンに見られるような、LCDコントローラーを備えた非常に安価なMCUに関する情報です。プログラミングマニュアルなどすべてを入手するのは簡単です。


5

オペレーティングシステムの役割は、CPU実行時間、RAM、I / Oなどのリソースへの共有アクセスを提供することです。ほとんどの単純なマイクロコントローラーベースの組み込みシステムは、一度に1つのプログラムしか実行せず、これらのリソース自体にアクセス(および管理)します。したがって、オペレーティングシステムは必要ありません。

組み込みシステムは通常Cでプログラミングされ、極端なタイミングやメモリの最適化のためにアセンブリでプログラミングされることもあります。一部の組み込みコンパイラでは、上位レベルの言語内にアセンブリを散在させることができます。


4

私は最近、Ubuntuを実行するタバコの自動販売機に出くわしました(マシンが再起動していたため、ロゴが表示されました)。



1

一般的な情報を探している場合は、「組み込みシステム」、「soc」(システムオンチップ)などを探してください。これらのタイプのデバイスの大部分は、Cなどの低レベル言語で実行されます。

おもしろい事実:Javaはもともと組み込みシステムプログラミングのソリューションとして考えられていました:http : //en.wikipedia.org/wiki/Oak_( programming_language )


よろしくお願いいたします。+1
ジョシュライツェル

1

ほとんどのキオスク、レジスタ、ドライブスルー画面、さらにはハイエンドのコーヒーマシンや電子レンジでさえ、「ジュラインプレッサ」シリーズのマシンのように、実際にはWindows XPまたはLinuxを実行しています。それらにSSHで接続してコーヒーを淹れることができます。

コーヒーマシンのcronジョブのgithubスクリプトは次のとおりです。https//github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb

ほとんどのルーター、新しいオーブン、新しい冷蔵庫、車、DVDプレーヤー、さまざまな電子機器、電球などの新しいホームオートメーション製品は、ARM linuxまたは組み込みLinuxのバージョンを実行しています。

20ドル未満の最も安価なデバイスは、新しい場合はESP8266または同様のデバイスで実行されます(LUAまたは削減されたノードサーバーを$ 2で一括実行できます-非常に安い)

http://nodemcu.com/index_en.html

FPGAと8051、Z80などの組み込みシステム、またはPICC、AVR、Arduinoなどの他の組み込みデバイスを使用すると、ESP8266などのオールインワン/ SoC(システムオンチップ)システムにすぐに置き換えられます。これらは単にプログラムするのが簡単すぎて、独自のWebサーバーを実行するチップ上の完全なシステムです。電源を入れてソースコードをアップロードするだけで、ネットワークサーバーが$ 2で利用できます。

私はPICCとAVR、8051をコーディングして育ちましたが、それらが機能するのを見るのは悲しいですが、ESP8266es以外は何も触れていません。 。バッテリーパックと展開ピンレイアウトを備えた開発ボードで、ebayで5ドル、adafruitで10ドルで入手できます。


-2

エンジニアから、シーメンスのライトレール通勤電車が386年代に走ると聞いたことがあります。

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