日常のマシン(コンピューターやモバイルデバイスではなく、家電製品、デジタル時計など)はどのようにプログラムされていますか?コカコーラの自動販売機のプログラミングにはどのようなコードが含まれますか?私のコーヒーメーカーは、事前にプログラムされた時間をどのように受け入れ、その時間が来たら数時間後にコーヒーのポットをれ始めますか?
これらの種類のマシンには、内部にオペレーティングシステムがありますか、それともさらに基本的なものですか?アセンブリ、C、または他の言語で書かれていますか?
そして、可能であればソースコードを使用して、これらのオペレーティングシステムまたは基盤となるコードシステムをリストするリソースを見つけたいと考えています。誰かがそのようなリソースを知っていれば(検索しても私には何も得られませんでした)、それは素晴らしいでしょう。
あなたが話していることのほとんどは、組み込みベースのシステムであり、Cは多くの場合利用できない贅沢です。彼らは伝統的な意味でソフトウェアを持っていません。ほとんどの場合、ソフトウェアはC、アセンブリ、またはマシンコードで記述されています。 CおよびASMでは、そのプラットフォームで使用するコンパイラを作成する必要があります。マシンコードは、コンパイラなしのバイナリとして記述されます。
コーヒーポットとそのような最も単純なシステムには、オペレーティングシステムが搭載されていません。メモリ内の開始アドレスから単純にロードし、そこにコードを配置します。多くの場合、これらのシステムの「コード」は、システムのハードドライブとして機能するEEPROMに焼き付けられています。プロムを燃やした後、コードを台無しにし、 チップを捨てる チップ上のコードを焼き直し、最初からやり直してください。ハイエンドデバイスがテストや展開などを容易にするために使用する新しいチップFPGAがありますが、それらは同じものです。
Coca-colaマシン、ルーターなどは通常、QNX、EMBOS、または運が良ければRTlinuxなどのリアルタイムOSを使用します。これらのほとんどは、大金でライセンスを取得した独自のOSですが、Cコンパイラ、ハードウェアで動作するドライバーなどがあります。
http://www.segger.com/cms/embos.html
RTLinux
それらはマイクロコントローラを使用します 8051 は古典的なものです。これらは8ビットまたは16ビットのコアであり、オペレーティングシステムを備えていることはめったにありません。プログラマーは、オンボード周辺機器を初期化し、割り込みハンドラーを実装するコードを記述します。使用される言語はアセンブリとCです。厳しいデバッグジョブには、インサーキットエミュレータが必要です。
Linuxや組み込みのJava JVM。
これらは 組み込みシステム であり、Cやアセンブリなどの非常に低レベルの言語を使用してプログラミングされます。一般に、このようなシステムはオペレーティングシステムなしで実行されますが、ブルーレイDVDプレーヤーやワイヤレスルーターなどの一部の新しい「日常のマシン」は、Unixベースのオペレーティングシステム上でコードを実行します。
他の人が言ったことに沿って、多くの最新の組み込みシステムもウィンドウの風味を実行します。それはアプリケーション次第です。また、多くの分野で、オペレーティングシステムを備えたより強力なプラットフォームで実行し、Javaを実行する必要があるブルーレイプレーヤーなどのケースや、エンドユーザーがより多くの機能を必要とする場合を処理する傾向があります。
デスクトップのプロセッサについて考えてみましょう。マシン命令を実行するだけであり、それ自体は「オペレーティングシステム」や「プログラム」を実際に気にしません。
コンピューターの電源を入れると、プロセッサーは最初の命令をポイントし、実行を開始します。
デスクトップで、「オペレーティングシステム」の実行を開始します。ただし、選択した命令セットをプロセッサで実行できない理由はありません。 (結果を画面に出力したいので、これはあまり役に立たないかもしれません。その機能はOSにあります。)同時に、プロセッサが出力するようにマシン命令が正しいオペコードで構成されている場合信号の正しいシーケンスを使用して、モニターに画像をペイントします。 OSは必要ありません。
デスクトップは非常に多くのことを行いますstuff OSの抽象化が一般的に必要です。しかし、そのコアでは、プロセッサが実行するのは命令の実行だけです。
コークス機とコーヒー機のプロセッサーについても同じです。それは、命令を実行するだけです。
まあ、ビットごとに機械命令を書くのは面倒です。そのため、デスクトップと同様に、通常はCでコードを記述し、それをマシンコードにコンパイルします。そのマシンコードは組み込みプロセッサにロードされ、実行されます。
組み込みシステムは、フルOSを必要としないわずかを行います。マイクロコントローラーは、通常のCPUソケットの多数のピンと比較して、チップ上に8個または16個のピンを持っている場合があります。
したがって、ワークフローはいくつかのコードを記述し(たとえば、Cで)、デスクトップマシンでコンパイルします。そのコンパイラは、組み込みチップのマシンコードを生成します。次に、そのコードがマイクロプロセッサにロードされます(これを行うには特別なハードウェアが必要です)。次に、チップに電力を供給し、命令の実行を開始します。シンプル!
特定の機能を実行する多くのデバイスには、「コード」が含まれていません。彼らは、電子部品の特性を介して機能を実行します。多くの異なる機能を実行できる、または簡単にアップグレードできる必要があるより高度なシステムには、マイクロコントローラーとある種の「オペレーティングシステム」が含まれます。これらにはまだ機能に制限があるため、オペレーティングシステムはシンプルで特別に設計されます。さらに高度になると、デバイスにはコンピューターに似たものが含まれます。システムのさまざまな部分と通信できる、より複雑なオペレーティングシステムを使用します。最後に、スマートフォンなどのデバイスに到達します。これには、ユーザーレベルのコードを実行でき、より単純なデバイスよりもはるかに多くのユーザー入力が可能な完全なオペレーティングシステムが含まれています。ただし、最新のプロセッサでさえ、本質的に非常に大きな電気回路です。 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
日常のアプライアンスに見られるローエンドのマイクロコントローラーは、通常、オペレーティングシステムを実行しません。それらは低コストで選択され、そのコストを左右する主な要因は、チップ上のピンの数(数十から数百)と内部メモリの量(数キロバイトからメガバイトROM、数からバイトから100キロバイトのRAM)。
フィーチャークリープは魔法のように機能するため、マイクロ波はマルチタスクが必要になる場合があります。この場合、プログラマーはオペレーティングシステムのコースを思い出し、必要に応じてメッセージパッシング、タスクスケジューリング、非同期I/Oなどを実装します。
もちろん、便宜上、シンプルさ、コードサイズなどのために、機能は基本的な方法で行われる傾向があります。多くの場合、タスク固有のコード内で一般化されたOS機能を見つけるために、プログラムを分析する方法に依存します。しかし、ハードコーディングされたタスクスケジューラからオペレーティングシステムへの道のりは長く、作業する数キロバイトしかない場合、市販のOSはnotソリューション。
ローエンドMCUについて学ぶために、人気のある電子部品選択サイトであるDigiKeyをご覧ください。 ここ は、コーヒーマシンで見られるようなLCDコントローラーを備えた非常に安価なMCUに関する情報です。プログラミングマニュアルやすべてのものを入手するのは簡単です。 。
オペレーティングシステムの仕事は、リソース(CPU実行時間、RAM、I/Oなど)への共有アクセスを提供することです。ほとんどのシンプルなマイクロコントローラーベースの組み込みシステムは、一度に1つのプログラムのみを実行し、これらのリソース自体にアクセス(および管理)します、したがって、オペレーティングシステムは必要ありません。
組み込みシステムは通常、Cでプログラムされますが、極端なタイミングやメモリの最適化のためにアセンブリでプログラムされることもあります。一部の組み込みコンパイラでは、より高いレベルの言語内でアセンブリを散在させることができます。
最近、Ubuntuを実行しているタバコの自動販売機に出会いました(マシンがリブートしていたので、ロゴを見ることができました)。
Embedded Systems Magazine および Circuit Cellar をご覧ください
一般的な情報を探している場合は、「組み込みシステム」、「soc」(system-on-a-chip)などを探してください。これらのタイプのデバイスの大部分は、Cなどの低レベル言語で実行されると思います。
楽しい事実:Javaはもともと組み込みシステムプログラミングのソリューションとして考えられていました: http://en.wikipedia.org/wiki/Oak_(programming_language )
ほとんどのキオスク、レジスタ、ドライブスルースクリーン、さらにハイエンドのコーヒーマシンと電子レンジでさえ、実際にWindows XPまたはLinux、「Jura Impressa」シリーズマシンのように動作します。コーヒー。
コーヒーマシンcronジョブのgithubスクリプトは次のとおりです。 https://github.com/NARKOZ/hacker-scripts/blob/master/fucking_coffee.rb
ほとんどのルーター、新しいオーブン、新しい冷蔵庫、車、DVDプレーヤー、さまざまな電子機器、電球などの新しいホームオートメーション製品は、ARM linuxまたは組み込みLinux。
20ドル未満の最も安価なデバイスは、新しい場合はESP8266または同様のデバイスで実行します(LUAまたは削減されたNodeサーバーを一括で$ 2で実行できます-非常に安い)
http://nodemcu.com/index_en.html
FPGAと8051、Z80などの組み込みシステム、またはPICC、AVR、Arduinoなどの他の組み込みデバイスは、ESP8266などのオールインワン/ SoC(システムオンチップ)システムにすぐに置き換えられます。それらはプログラムが簡単すぎて、独自のWebサーバーを実行するチップ上の完全なシステムです。電源を入れてソースコードをアップロードするだけで、ネットワークサーバーが2ドルで手に入ります。
私はPICCとAVRと8051をコーディングして育ちましたが、それらが行くのを見るのは悲しいですが、ESP8266es以外は何も触れていません。価格が1/10であり、作業がはるかに簡単です。バッテリーパックと爆発ピンレイアウトを備えた開発ボードで、ebayで5ドル、adafruitで10ドルで入手できます。