Embedded-systems-es-terms
組み込みシステム-用語
プログラムカウンター
プログラムカウンタは、次に実行される命令のアドレスを含む16ビットまたは32ビットのレジスタです。 PCは、命令がフェッチされるたびに、次の連続したメモリ位置に自動的に増分します。 分岐、ジャンプ、および割り込み操作は、プログラムカウンターに次の連続した場所以外のアドレスをロードします。
パワーオンリセットをアクティブにすると、レジスタ内のすべての値が失われます。 これは、リセット時にPC(プログラムカウンター)の値が0になり、CPUがROMメモリ位置0000から最初のオペコードをフェッチすることを強制することを意味します。 これは、CPUが最初の命令を検出する場所であるため、ROMロケーション0000にアップコードの最初のバイトを配置する必要があることを意味します
ベクターをリセット
リセットベクトルの重要性は、ファームウェアの最初の命令を含むメモリアドレスをプロセッサに向けることです。 Reset Vectorがないと、プロセッサはどこから実行を開始するかを知りません。 リセット時に、プロセッサは事前定義されたメモリ位置からリセットベクトル値をプログラムカウンタ(PC)にロードします。 CPU08アーキテクチャでは、これは$ FFFE:$ FFFFの場所にあります。
リセットベクトルが不要な場合、通常、開発者はそれを当たり前のことと見なし、最終画像にプログラムしません。 その結果、プロセッサは最終製品で起動しません。 これは、デバッグ段階でよくある間違いです。
スタックポインタ
スタックはRAMに実装され、SP(スタックポインター)レジスタと呼ばれるCPUレジスタを使用してアクセスします。 SPレジスタは8ビットのレジスタであり、00hからFFhの範囲のメモリアドレスをアドレス指定できます。 最初、SPレジスタには値07が含まれ、8051がスタックに使用する最初の場所として場所08を指します。
CPUレジスタの内容がスタックに格納されている場合、PUSH操作と呼ばれます。 スタックの内容がCPUレジスタに保存される場合、POP操作と呼ばれます。 つまり、レジスタをスタックにプッシュして保存し、スタックからポップして取得します。
無限ループ
無限ループまたは無限ループは、次の理由により、ループで無限に実行されるコンピュータプログラム内の命令のシーケンスとして識別できます-
- 終了条件のないループ。
- 決して満たすことのできない終了条件を持つループ。
- ループを最初からやり直す原因となる終了条件を持つループ。
このような無限ループは、通常、使用可能なプロセッサ時間をすべて消費するため、古いオペレーティングシステムが応答しなくなる原因となりました。 ユーザー入力を待機しているI/O操作は、「無限ループ」とも呼ばれます。 コンピューターの「フリーズ」の原因の1つは、無限ループです。他の原因には、*デッドロック*および*アクセス違反*が含まれます。
組み込みシステムは、PCとは異なり、アプリケーションを「終了」しません。 割り込みまたは*事前にスケジュールされたタスク*の形でイベントが発生するのを待っている無限ループをアイドル状態にします。 電力を節約するために、一部のプロセッサは、無限ループをアイドル状態にする代わりに、特別な sleep または* waitモード*に入りますが、タイマーまたは外部割り込みのいずれかでこのモードから出ます。
割り込み
割り込みは主に、イベントが発生したことをプログラムに指示するハードウェアメカニズムです。 これらはいつでも発生する可能性があるため、プログラムフローとは非同期です。 プロセッサによる特別な処理が必要であり、最終的には対応する割り込みサービスルーチン(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