組み込みシステム-用語
プログラムカウンター
プログラムカウンタは、次に実行される命令のアドレスを含む16ビットまたは32ビットのレジスタです。PCは、命令がフェッチされるたびに、次のシーケンシャルメモリ位置に自動的にインクリメントします。分岐、ジャンプ、および割り込み操作は、プログラムカウンタに次の順次位置以外のアドレスをロードします。
パワーオンリセットをアクティブにすると、レジスタ内のすべての値が失われます。これは、リセット時にPC(プログラムカウンタ)の値が0であることを意味し、CPUがROMメモリ位置0000から最初のオペコードをフェッチするように強制します。つまり、アップコードの最初のバイトをROM位置0000に配置する必要があります。 CPUは最初の命令を見つけることを期待しています
ベクトルをリセット
リセットベクトルの重要性は、ファームウェアの最初の命令を含むメモリアドレスをプロセッサに向けることです。リセットベクトルがないと、プロセッサはどこから実行を開始するかわかりません。リセット時に、プロセッサは事前定義されたメモリ位置からリセットベクトル値をプログラムカウンタ(PC)にロードします。CPU08アーキテクチャでは、これは場所$ FFFE:$ FFFFにあります。
リセットベクトルが必要ない場合、開発者は通常それを当然のことと見なし、最終的なイメージにプログラムしません。その結果、プロセッサは最終製品で起動しません。これは、デバッグフェーズ中に発生する一般的な間違いです。
スタックポインタ
スタックはRAMに実装され、CPUレジスタを使用してSP(スタックポインタ)レジスタと呼ばれるスタックにアクセスします。SPレジスタは8ビットレジスタであり、00hからFFhの範囲のメモリアドレスをアドレス指定できます。最初に、SPレジスタには、8051によってスタックに使用される最初の場所として場所08を指す値07が含まれています。
CPUレジスタの内容がスタックに格納される場合、それはPUSH操作と呼ばれます。スタックの内容をCPUレジスタに格納することをPOP演算と呼びます。つまり、レジスタをスタックにプッシュして保存し、スタックからポップして取得します。
無限ループ
無限ループまたは無限ループは、次の理由により、ループ内で無限に実行されるコンピュータプログラム内の一連の命令として識別できます。
- 終了条件のないループ。
- 決して満たすことができない終了条件でループします。
- ループを最初からやり直す原因となる終了条件のあるループ。
このような無限ループは通常、古いオペレーティングシステムが応答しなくなる原因となりました。これは、無限ループが使用可能なすべてのプロセッサ時間を消費するためです。ユーザー入力を待機するI / O操作は、「無限ループ」とも呼ばれます。コンピューターの「フリーズ」の考えられる原因の1つは、無限ループです。その他の原因は次のとおりですdeadlock そして access violations。
組み込みシステムは、PCとは異なり、アプリケーションを「終了」することはありません。それらは、割り込みの形でイベントが発生するのを待つ無限ループを介してアイドル状態になります。pre-scheduled task。電力を節約するために、一部のプロセッサは特別に入力しますsleep または wait modes 無限ループを介してアイドリングする代わりに、タイマーまたは外部割り込みのいずれかでこのモードを終了します。
割り込み
割り込みは主に、イベントが発生したことをプログラムに指示するハードウェアメカニズムです。これらはいつでも発生する可能性があるため、プログラムフローとは非同期です。これらはプロセッサによる特別な処理を必要とし、最終的には対応する割り込みサービスルーチン(ISR)によって処理されます。割り込みは迅速に処理する必要があります。割り込みの処理に時間がかかりすぎると、別の割り込みを見逃す可能性があります。
リトルエンディアンとビッグエンディアン
数値は常に同じ方法で表示されますが、メモリに同じ方法で保存されるわけではありません。ビッグエンディアンマシンは、最下位のメモリアドレスに最上位バイトのデータを格納します。ビッグエンディアンマシンは0x12345678を-として格納します
ADD+0: 0x12
ADD+1: 0x34
ADD+2: 0x56
ADD+3: 0x78
一方、リトルエンディアンマシンは、最下位のメモリアドレスにデータの最下位バイトを格納します。リトルエンディアンのマシンは、0x12345678を-として格納します
ADD+0: 0x78
ADD+1: 0x56
ADD+2: 0x34
ADD+3: 0x12