3.9  
Absolute Address Allocation Specification
 
The destination is specified using the __directmap keyword in the CA78K0, whereas #pragma address is written immediately before the variable declaration in the CC-RL.
 
The format of the CA78K0 is as follows.
| 
__directmap [__sreg] [static] type-name variable-name = location-address; | 
The format of the CC-RL is as follows.
| 
#pragma address variable-name = location-address 
variable-declaration | 
 
| 
- | Since the memory map is different between the 78K0 and RL78, a message is output. | 
| 
- | The CcnvCA78K0 deletes the __directmap keyword and adds #pragma address just before the variable declaration. The address specification is deleted from the variable declaration and execution moves to the address specification of #pragma address. | 
| 
- | When a macro or function pointer is used in a description using the __directmap keyword, the function name may be interpreted erroneously. Perform conversion after expanding the macro in advance. The location specification of the function pointer has to be modified manually. | 
| 
- | If different variables are assigned to the same address with __directmap, a compile error will occur in the CC-RL after conversion. Care is required because the CcnvCA78K0 does not check whether different variables are being assigned to the same address. | 
 
[Examples]
| 
Pattern 1 | 
Before conversion | __directmap  int  i = 0xfe00; | 
| 
After conversion | #pragma  address  i=0xfe00 int  i; | 
| 
Pattern 2 | 
Before conversion | __directmap  int*  i = 0xfe00; | 
| 
After conversion | #pragma  address  i=0xfe00 int*  i; | 
| 
Pattern 3 | 
Before conversion | __directmap  int  i = 0xfe00, j=0xfe10; | 
| 
After conversion | #pragma  address  i=0xfe00 #pragma  address  j=0xfe10 int  i,j; | 
| 
Pattern 4 | 
Before conversion | __directmap struct x {  char a;   char b; } xx = { 0xfe30 }; | 
| 
After conversion | #pragma address xx=0xfe30 struct x {  char a;   char b; } xx; | 
| 
Pattern 5 | 
Before conversion | #define MY_MACRO1 (int  i = 0xfe00) __directmap  MY_MACRO1; | 
| 
After conversion | #define MY_MACRO1 (int  i = 0xfe00) __directmap  MY_MACRO1; | 
| 
Corrective action | 
Perform conversion after expending the macro. | 
| 
Pattern 6 | 
Before conversion | __directmap  void (*fp[])(void) = 0x1234; | 
| 
After conversion | #pragma address void=0x1234 void (*fp[])(void); | 
| 
Corrective action | 
Manually write #pragma address for the CC-RL. |