NEC ELECTRONICS NEC ELECTRONICS
NEC electronics NEC electronics NEC
ホーム
アプリケーション
製品情報
先端技術
サポート
WEBショップ
ニュース&イベント
会社案内
header
GO
詳細検索機能/特性検索
サイトマップ お問い合わせ

割り込み関連


目次

    
FAQ-ID = 78k0r-nnn
724: 割り込みが入った時の処理は、どこに記述すればよいですか?
725: OS管理外割り込みハンドラとOS管理割り込みハンドラの違いは何ですか?
726: OS管理外割り込みハンドラはどのように記述すればよいですか?
727: OS管理割り込みハンドラはどのように記述すればよいですか?

78k0r
-724
割り込みが入った時の処理は、どこに記述すればよいですか?
Q
割り込みが入った時の処理は、どこに記述すればよいですか?
A
割り込みハンドラに記述します。

割り込みハンドラとは、割り込みが発生した際にただちに起動される割り込み処理専用ルーチンで、タスクとは独立したものとして扱われます。

RX78K0Rでは、OS管理外割り込みハンドラと、OS管理割り込みハンドラの2種類を用意しています。

-78K0R-

この情報はお役にたちましたか?
back to top  
(2007/02)

78k0r
-725
OS管理外割り込みハンドラとOS管理割り込みハンドラの違いは何ですか?
Q
OS管理外割り込みハンドラとOS管理割り込みハンドラの違いは何ですか?
A
  • OS管理外割り込みハンドラ


    リアルタイムOS(RX78K0R)管理外の割り込み処理です。
    ハンドラ上でリアルタイムOSの機能を一切使用することができません。
    なお、OS管理外割り込みハンドラは、割り込みレベルを0か1に割り付ける必要があります。


  • OS管理割り込みハンドラ


    リアルタイムOS(RX78K0R)が管理する割り込み処理です。
    ハンドラ上でリアルタイムOSの機能(サービス・コール、リアルタイムOSトレース機能、リアルタイムOSによるレジスタ退避/復帰、リアルタイムOSによるスタック管理)を利用することができます。
    なお、OS管理割り込みハンドラは、割り込みレベルを2か3に割り付ける必要があります。
  • 仕様を下表にまとめます。


     OS管理外割り込みハンドラOS管理割り込みハンドラ
    サービス・コールの発行不可
    リアルタイムOSトレース不可
    多重割り込み
    設定可能な割り込み優先度レベル0,1レベル2,3

    ※割り込み優先度はレベル0が最高、レベル3が最低です。

    -78K0R-

    この情報はお役にたちましたか?
    back to top  
    (2007/02)

    78k0r
    -726
    OS管理外割り込みハンドラはどのように記述すればよいですか?
    Q
    OS管理外割り込みハンドラはどのように記述すればよいですか?
    A
    CC78K0Rの場合は“#pragma interrupt”を使用し、以下のように記述します。
    --------------------------------
    #pragma interrupt INTP0 inthdr1
    
    void
    inthdr1(void)
    {
        /* 本体処理を記述 */
        return;
    }
    --------------------------------
    
    RA78K0Rの場合は、レジスタの退避/復帰処理、スタック管理などをユーザが自由に記述します。

    -78K0R-

    この情報はお役にたちましたか?
    back to top  
    (2007/02)

    78k0r
    -727
    OS管理割り込みハンドラはどのように記述すればよいですか?
    Q
    OS管理割り込みハンドラはどのように記述すればよいですか?
    A
    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-

    この情報はお役にたちましたか?
    back to top  
    (2007/02)





















     ご利用にあたって  個人情報保護について  RSS       © 1995-2008  NEC Electronics Corporation