Renesas Synergy™

FAQ 1008128 : CA850で、ポインタをsconst/const領域にマッピングしたい場合、どのように記述すればよいですか?

回答

ポインタについては、"const"の指定場所により、異なる解釈がされます。
なお、.sconst セクションに割り当てるときは#pragma section sconst指定をしてください。

(1) const char *p;

ポインタが示すオブジェクト(*p)を書き換えできないことを示します。
ポインタ自体(p)は書き換え可能です。
したがって、

  *p = 0;    /*エラー*/
  p = 0;     /*正しい*/

のようになり、ポインタ自体はRAM(.sdata/.data)に配置されます。

(2) char *const p;

ポインタ自体(p)を書き換えできないことを示します。
ポインタが示すオブジェクト(*p)は書き換え可能です。
したがって、

  *p = 0;    /*正しい*/
  p = 0;     /*エラー*/

のようになり、ポインタ自体はROM(.sconst/.const)に配置されます。

(3) const char *const p;

ポインタ自体(p)、ポインタが示すオブジェクト(*p)を書き換えできないことを示します。
したがって、

  *p = 0;    /*エラー*/
  p = 0;     /*エラー*/

のようになり、ポインタ自体はROM(.sconst/.const)に配置されます。

 

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください