CC78K0Rの場合は“#pragma rtos_interrupt”を使用し、以下のように記述します。
----------------------------------------
#pragma rtos_interrupt INTP0 inthdr1
#include "kernel.h"
#include "kernel_id.h"
void
inthdr1(void)
{
/* 本体処理を記述 */
return;
}
----------------------------------------
RA78K0Rの場合はRX78K0Rの割り込み開始関数(__kernel_int_entry)/割り込み復帰関数(_ret_int)を使用し、以下のように記述します。
----------------------------------------
$ INCLUDE (kernel.inc)
$ INCLUDE (kernel_id.inc)
PUBLIC _inthdr1
EXTRN _@RTARG0
EXTRN _@RTARG2
EXTRN _@RTARG4
EXTRN _@RTARG6
EXTRN _@SEGAX
EXTRN _@SEGDE
CSEG
_inthdr1:
CALL !!__kernel_int_entry ;割り込みハンドラの開始。内部でレジスタ保存。
MOVW AX, _@RTARG0 ;saddr領域の退避。
PUSH AX
MOVW AX, _@RTARG2
PUSH AX
MOVW AX, _@RTARG4
PUSH AX
MOVW AX, _@RTARG6
PUSH AX
MOVW AX, _@SEGAX
PUSH AX
MOVW AX, _@SEGDE
PUSH AX
; 本体処理を記述
POP AX
MOVW _@SEGDE, AX ;saddr領域の復帰。
POP AX
MOVW _@SEGAX, AX
POP AX
MOVW _@RTARG6, AX
POP AX
MOVW _@RTARG4, AX
POP AX
MOVW _@RTARG2, AX
POP AX
MOVW _@RTARG0, AX
BR !!_ret_int ;割り込みハンドラを終了。スタックは内部で戻す。
INTP0 CSEG AT 08h ;ベクタ・テーブルへ割り込みハンドラを登録。
DW _inthdr1
END
----------------------------------------
-78K0R-