ベクタ

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 -- 登録を解除するハンドラ

戻り値: