Everything
3.9 絶対番地配置指定

CA78K0Rでは__directmapキーワードを用いて配置先を指定しますが,CC-RLでは#pragma addressを変数宣言の直前に記述します。

 

CA78K0Rの書式は以下の通りです。

__directmap [__sreg] [static] 型名 変数名 = 配置アドレス;

CC-RLの書式は以下の通りです。

#pragma address 変数名 = 配置アドレス

変数宣言

 

-

__directmapキーワードを削除し,直前に#pragma addressを追加します。変数宣言から配置アドレス指定を削除し,#pragma addressの配置アドレス指定に移動します。

-

__directmapキーワードを用いた記述にマクロや関数ポインタを使用した場合,関数名の判断を誤る可能性があります。予めマクロを展開してから変換してください。関数ポインタの配置指定は,手動で修正してください。

-

__directmapで異なる変数を同一アドレスに割り当てている場合,変換後CC-RLにてコンパイル・エラーとなります。CcnvCA78K0Rは異なる変数を同一アドレスに割り当てているかどうかをチェックしませんのでご注意ください。

 

[例]

パターン1

変換前

__directmap  int  i = 0xffe00;

変換後

#pragma  address  i=0xffe00
int  i;

パターン2

変換前

__directmap  int*  i = 0xffe00;

変換後

#pragma  address  i=0xffe00
int*  i;

パターン3

変換前

__directmap  int  i = 0xffe00, j=0xffe10;

変換後

#pragma  address  i=0xffe00
#pragma  address  j=0xffe10
int  i,j;

パターン4

変換前

__directmap struct x {
   char a;
   char b;
} xx = { 0xffe30 } ;

変換後

#pragma address xx=0xffe30
struct x {
   char a;
   char b;
} xx;

パターン5

変換前

#define MY_MACRO1 (int  i = 0xffe00)
__directmap  MY_MACRO1;

変換後

#define MY_MACRO1 (int  i = 0xffe00)
__directmap  MY_MACRO1;

対応

マクロを展開した状態に修正してから変換してください。

パターン6

変換前

__directmap  void (*fp[])(void) = 0x1234;

変換後

#pragma address void=0x1234
void (*fp[])(void);

対応

手動でCC-RLの#pragma addressを記述してください。