Everything
3.6 割り込み関数

CA78K0Rの#pragma interrupt/vectおよびキーワード__interrupt, __interrupt_brkを,CC-RLの#pragma interrupt/interrupt_brkに変換します。

 

CA78K0Rの割り込み関数の書式は以下の通りです。

#pragma interrupt(またはvect) 割り込み要求名 関数名 [スタック切り替え指定] [{スタック使用指定 | 無変更指定 | レジスタバンク指定}]

または

__interrupt 関数宣言

__interrupt_brk 関数宣言

 

CC-RLの割り込み関数の書式は以下の通りです。

#pragma interrupt [(]関数名[([vect=アドレス][,bank=レジスタバンク][,enable={true|false}])][)]

関数宣言

#pragma interrupt_brk [(]関数名[([bank=レジスタバンク][,enable={true|false}])][)]

関数宣言

 

-

割り込み要求名が存在する場合は,#include “iodefine.h”を出力します。

-

__interruptは#pragma interruptに,__interrupt_brkは#pragma interrupt_brkに変換します。

-

割り込み要求名がBRK_Iの場合は,#pragma interrupt_brkに変換します。

-

「割り込み要求名」は,アドレスを示すマクロとして「vect=アドレス」に変換します。マクロの値はiodefine.hで定義されます。

-

「レジスタバンク指定」は,「bank=レジスタバンク」に変換します。

-

「スタック切り替え指定」,「スタック使用指定」,「無変更指定」はCC-RLに存在しないため,メッセージを出力し削除します。

-

__interrupt, __interrupt_brkキーワードを用いた割り込み関数の宣言や定義にマクロやtypedefを使用した場合,関数名の判断を誤る可能性があります。予めマクロやtypedefを展開してから変換してください。

-

同一関数に対するpragma指令とキーワードによる割り込み関数の記述がある場合,どちらも#pragma指令に変換することで,変換後に#pragma指令が重複してコンパイル・エラーが発生することがあります。この場合は,重複する記述を削除してください。

-

__interrupt, __interrupt_brkキーワードを指定した関数宣言の引数を省略した場合,CC-RLではコンパイル・エラーとなります。引数の型としてvoid型を記述してください。

 

[例]

パターン1

変換前

#pragma vect INTP0 func sp=buff+10 rb1
void func(void) { }

変換後

#pragma interrupt func(vect=INTP0, bank=RB1)
void func(void) { }

パターン2

変換前

__interrupt void func(void) { }

変換後

#pragma interrupt func
void func(void) { }

パターン3

変換前

#pragma interrupt BRK_I func
void func(void) { }

変換後

#pragma interrupt_brk func
void func(void) { }

パターン4

変換前

__interrupt void func1(void), func2(void);

変換後

#pragma interrupt func1
void func1(void);
#pragma interrupt func2
void func2(void);

パターン5

変換前

#pragma interrupt INTP0 func
__interrupt func(void);

変換後

#pragma interrupt func(vect=INTP0)
void func(void);
#pragma interrupt func
void func(void);

対応

CC-RLでは#pragma指令の重複でエラーとなります。キーワードから変換した#pragma指令を削除してください。

パターン6

変換前

typedef void func_t(void);
__interrupt func_t f1;

変換後

typedef void func_t(void);
__interrupt func_t f1;

対応

CC-RLではコンパイル・エラーとなります。予めtypedefやマクロを展開してください。