3.9 Absolute address allocation specification

The destination is specified using the __directmap keyword in the CA78K0R, whereas #pragma address is written immediately before the variable declaration in the CC-RL.

 

The format of the CA78K0R 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

 

-

The CcnvCA78K0R 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 CcnvCA78K0R does not check whether different variables are being assigned to the same address.

 

[Examples]

Pattern 1

Before conversion

__directmap  int  i = 0xffe00;

After conversion

#pragma  address  i=0xffe00
int  i;

Pattern 2

Before conversion

__directmap  int*  i = 0xffe00;

After conversion

#pragma  address  i=0xffe00
int*  i;

Pattern 3

Before conversion

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

After conversion

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

Pattern 4

Before conversion

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

After conversion

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

Pattern 5

Before conversion

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

After conversion

#define MY_MACRO1 (int  i = 0xffe00)
__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.