ベクタ

SOLID-OSでは、ベクタ発生時に登録した関数を呼び出すことができます。

関数は、コアサービスが内部で所有しているスタックを使用して、SVCモードで呼び出されます。

登録がなければ、例外発生時にデフォルトの動作が呼び出されます。 JTAGデバッガが接続されている場合は、予め埋め込まれているブレークポイント命令によって 実行が停止し、IDE上に発生した例外の種類などの情報が表示されます。

ベクタ関連のAPIを使用するには、solid_vector.h をインクルードしてください。

#include "solid_vector.h"

API

ベクタ番号

SOLID_VECTOR_UNDEF
SOLID_VECTOR_SWI
SOLID_VECTOR_PREFETCH
SOLID_VECTOR_DATAABORT
SOLID_VECTOR_IRQ
SOLID_VECTOR_FIQ

定数

名前 説明
SOLID_VECTOR_UNDEF 0 未定義命令
SOLID_VECTOR_SWI 1 ソフトウェア割り込み
SOLID_VECTOR_PREFETCH 2 プリフェッチアボート
SOLID_VECTOR_DATAABORT 3 データアボート
SOLID_VECTOR_IRQ 4 割り込み要求
SOLID_VECTOR_FIQ 5 高速割り込み要求

SOLID_VECTOR_HANDLER

typedef struct _SOLID_VECTOR_HANDLER_ SOLID_VECTOR_HANDLER

説明

ベクタハンドラ登録用構造体

定義

typedef struct _SOLID_VECTOR_HANDLER_ {
   struct _SOLID_VECTOR_HANDLER_ *pNext;
   int (*func)(void*, SOLID_CPU_CONTEXT*);
   void* param;
} SOLID_VECTOR_HANDLER;

メンバー

pNext
コアサービス側で使用
func
ベクタ発生時に呼び出される関数
param
ベクタ発生時に呼び出される関数に渡す引数

SOLID_VECTOR_Register

int SOLID_VECTOR_Register(int vec, SOLID_VECTOR_HANDLER *pHandler)

割り込みベクタのハンドラを登録します

パラメータ:
戻り値:

SOLID_VECTOR_UnRegister

int SOLID_VECTOR_UnRegister(int vec, SOLID_VECTOR_HANDLER *pHandler)

割り込みベクタのハンドラの登録を解除します

パラメータ:
戻り値:

SOLID_VECTOR_IsInInterrupt

int SOLID_VECTOR_IsInInterrupt(void)

割り込みベクタ処理中かどうかを判定する

戻り値:
  • 0: 割り込み処理中でない
  • 1: 割り込み処理中である

SOLID_SVC_HANDLER

typedef struct _SOLID_SVC_HANDLER_ SOLID_SVC_HANDLER

説明

SVC(SWI)割り込みハンドラ登録用構造体

定義

typedef struct _SOLID_SVC_HANDLER_ {
   struct _SOLID_SVC_HANDLER_ *pNext;
   int (*func)(void*, SOLID_CPU_CONTEXT*);
   void* param;
   int startSvcNo;
   int endSvcNo;
} SOLID_SVC_HANDLER;

メンバー

pNext
コアサービス側で使用
func
SVC(SWI)割り込み発生時に呼び出される関数
param
発生時に呼び出される関数に渡す引数
startSvcNo
対応するSVC(SWI)割り込みの開始番号
startSvcNo
対応するSVC(SWI)割り込みの終了番号

SOLID_SVC_Register

int SOLID_SVC_Register(SOLID_SVC_HANDLER *pHandler)

SVC(SWI)割り込みのハンドラを登録します

パラメータ:pHandler -- 登録するハンドラ
戻り値:

SOLID_SVC_UnRegister

int SOLID_SVC_UnRegister(SOLID_SVC_HANDLER *pHandler)

SVC(SWI)割り込みのハンドラの登録を解除します

パラメータ:pHandler -- 登録を解除するハンドラ
戻り値: