CA78K0の#pragma rtos_interruptおよびキーワード__rtos_interruptを,CC-RLの#pragma rtos_interruptに変換します。
CA78K0の書式は以下の通りです。
#pragma rtos_interrupt [割り込み要求名 関数名 [スタック切り替え指定]]
|
または
CC-RLの書式は以下の通りです。
#pragma rtos_interrupt [(]関数名[(vect=アドレス)][)]
関数宣言
|
- | 割り込み要求名が存在する場合は,#include “iodefine.h”を出力します。デバイス変更により,割り込み要求名は適切でない場合があるため,メッセージを出力します。 |
- | __rtos_interruptは#pragma rtos_interruptに変換します。 |
- | 「割り込み要求名」は,アドレスを示すマクロとして「vect=アドレス」に変換します。マクロの値はiodefine.hで定義されます。 |
- | CA78K0の書式では関数名を省略可能であり,RTOS割り込みハンドラが使用するret_int, ret_wupをユーザが定義できないようにする機能があります。同じ機能はCC-RLには存在しないため,割り込み要求名と関数名が省略された場合はメッセージを出力し,#pragma指令をコメントアウトします。 |
- | 「スタック切り替え指定」はCC-RLに存在しないため,メッセージを出力し削除します。 |
- | __rtos_interruptキーワードを用いた割り込み関数の宣言や定義にマクロやtypedefを使用した場合,関数名の判断を誤る可能性があります。予めマクロやtypedefを展開してから変換してください。 |
- | 同一関数に対するpragma指令とキーワードによる割り込み関数の記述がある場合,どちらも#pragma指令に変換することで,変換後に#pragma指令が重複してCC-RLではコンパイル・エラーとなります。この場合は,重複する記述を削除してください。 |
- | __rtos_interruptキーワードを指定した関数宣言の引数を省略した場合,CC-RLではコンパイル・エラーとなります。引数の型としてvoid型を記述してください。 |
[例]
パターン1
|
変換前
|
#pragma rtos_interrupt INTP0 func
void func(void) { }
|
変換後
|
#pragma rtos_interrupt func (vect=INTP0)
void func(void) { }
|
パターン2
|
変換前
|
#pragma rtos_interrupt INTP0 func sp=buff+10
void func(void) { }
|
変換後
|
#pragma rtos_interrupt func (vect=INTP0)
void func(void) { }
|
パターン3
|
変換前
|
__rtos_interrupt void func(void) { }
|
変換後
|
#pragma rtos_interrupt func
void func(void) { }
|
パターン4
|
変換前
|
#pragma rtos_interrupt
|
変換後
|
// #pragma rtos_interrupt
|
パターン5
|
変換前
|
__rtos_interrupt void func1(void), func2(void);
|
変換後
|
#pragma rtos_interrupt func1
void func1(void);
#pragma rtos_interrupt func2
void func2(void);
|
パターン6
|
変換前
|
#pragma rtos_interrupt INTP0 func
__rtos_interrupt func(void);
|
変換後
|
#pragma rtos_interrupt func(vect=INTP0)
void func(void);
#pragma rtos_interrupt func
void func(void);
|
対応
|
CC-RLでは#pragma指令の重複でエラーとなります。キーワードから変換した#pragma指令を削除してください。
|
パターン7
|
変換前
|
typedef void func_t(void);
__rtos_interrupt func_t f1;
|
変換後
|
typedef void func_t(void);
__rtos_interrupt func_t f1;
|
対応
|
CC-RLではコンパイル・エラーとなります。予めtypedefやマクロを展開してください。
|