ベクタとフェッチの意味
1.目的
- STM32のマイコンのデータシートを参照すると、ベクタとフェッチという言葉が出てくる。今回は、その言葉の意味について記載する。
- ベクタについて理解する
- フェッチの意味について理解する。
目次
2. ベクタとは
・イベント割り込みが発生した時に、プログラムの実行を制御する為の、
特定のメモリアドレス(メモリの位置)のこと。
・特定のイベントや割り込みが処理される為の、目的地を示す参照ポインタとなっている。
・例えば、割り込み要求が発生すると、マイコンは、割り込みベクタテーブルと呼ばれる特定のメモリ領域を参照する。
・Coretex-M3では、このメモリ領域にアドレスを記述し、このアドレスにジャンプし、そこに配置された割り込みなどを実行する。
3. ベクタテーブルとは
・ベクタアドレスを格納するテーブルの事をベクタテーブルと呼ぶ。
・通常、固定長のメモリ領域に配置される。
・関連つけられたの開始アドレスが記載される。
STM32F103のリファレンスマニュアルのベクタテーブルを参照すると下記のようになっている。
参照データシート:リファレンス マニュアル (日本語) | STM32, STM8ファミリはSTの32bit/8bit汎用マイクロコントローラ製品
・下記のようにそれぞれに位置が割り振られ、その位置に、優先度、機能、アドレスが割り当てられている。
・例えば、DMA1_Channel1のイベント割り込みが発生したとすると、
ベクタの位置11を参照し、アドレス0x0000_006Cを取得する。
・このアドレスにジャンプし、このアドレスに記載されている処理を実行する。
・STM32では、マイコン側で決めてあるが、
通常、開発者は、割り込みや例外に対応する処理ルーチンを適切なベクタアドレスに配置する必要がある。
これにより、割り込みや例外処理が効率的に行われ、リアルタイム性や信頼性が確保される。
・この内容は、データシートの理解や、フォルトエラーなど発生時に必要な知識である。
https://chat.openai.com/?model=text-davinci-002-render-sha
4. フェッチとは
・プログラムの命令をメモリから所得する処理のこと。
・マイコンは、メモリ内の特定のアドレスから次の命令をフェッチして実行する。
・フェッチは、プログラムカウンタ(Program Counter)と呼ばれる特殊なレジスタを使用して行われる。
・プログラムカウンタは、次に実行する命令のメモリアドレスを保持し、フェッチされる次の命令の場所を指定する。
・割り込みや例外などのイベントが発生すると、
プロセッサは対応するベクタを参照し、
そのイベントの処理に必要なアドレスを取得する。
・ベクタテーブル内のアドレスからフェッチされた命令が実行されることで、
イベントや割り込みが適切に処理される。
・ベクタはイベントや割り込みの処理の目的地を示す。
・フェッチは次の命令をメモリから取得して実行するための処理を指す。
・これらの概念は、プログラムの制御フローとイベントハンドリングの重要な要素である。
例えば、RM0008に、下記のような文言がある。
・「CPU はアドレス 0x0000 0000 からスタック最上位の値をフェッチし、0x0000 0004から始まるブートメモリからコードの実行を開始します。」
これについて説明すると。
・CPUアドレス0x0000 0000は、メモリ上の特定の位置を示す。
・スタックは、一時的なデータを保存する為の領域のことを示す。
・スタック最上位の値を取得し処理することにより、以前に保存した重要な情報やアドレスを取得することが出来る。
・「0x0000 0004」から始まるブートメモリは、コンピュータシステムの起動時に使用されるメモリ領域で、特定のメモリ領域を指す。
ここからプログラムの実行が開始される。
(ブートメモリは通常、システムの起動時に実行されるコードやデータを含む特殊な領域)
つまり、0x0000 0000からスタックに保存してある最上位の値を処理することによって、以前の情報を読み出し、0x0000 0004から始まるブートメモリから、コードを実行し始めるということ。
この0x0000 0000などのアドレスについては、リファレンスマニュアルの4.Memory mappingを参照
下記に、一部を示す。
5. プリフェッチとは
・CPUがデータをあらかじめキャッシュメモリに読み出しておく機能のこと。
・データの読み出し命令があった場合、逐次読み出しに比べ処理応答速度を大幅に短縮できる。
参考:
・プリフェッチとは (prefetch): - IT用語辞典バイナリ
関連記事
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary
・知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary
・C言語基礎知識6(関数) - Project_OKI’s diary
・C言語基礎知識7(構造体1) - Project_OKI’s diary
・C言語基礎知識8(enum:列挙型) - Project_OKI’s diary
・C言語基礎知識9(typedef) - Project_OKI’s diary