プログラムや変数はメモリ空間上に配置されていますが,割り当てられている場所のことをセクションといいます.セクションを変更するには,プロジェクトツリー上の「CC-RX(ビルド・ツール)」「プロパティ」タブ「よく使うオプション(リンク)」「セクションの開始アドレス」を選択します.これを選択すると,右側にボタンが現れますので,これを押してください.

セクションとそのアドレスを示すダイアログが現れますので,追加,変更もしくは削除を行えます.

さて,セクションは初めからいくつかの名前が定められており,それぞれ役割が異なります.以下では,セクションごとの役割について説明します.まず,セクション名の接頭辞について説明します.下記のアルファベットがセクション名の先頭についた場合,そのセクションの役割がわかります.

ここで,「R」について補足します.セクションDはROMに設置し,初期化を行いますが,このままでは初期化された数値になったままで変更することができません.そこで,セクションDをRAM領域にコピーして使用しています.以上の処理をまとめて下に示します.

  1. ROMにあるセクションDにある変数を初期化されます.
  2. セクションDからセクションRにコピーします.これはデフォルトでリンカオプションで指定されていますので,自動的に行ってくれます.
  3. プログラム中で変数を変更する場合には,セクションRにある変数を変更します.

次に,「_2」や「_1」について説明しますが,その前にアライメントについて説明します.アライメントとは,セクションの配置アドレスを補正するための値であり,最適化リンケージエディタでは、各セクションの配置アドレスをそれぞれのアライメント数の倍数になるように補正します.話を戻しますと,たとえば「C_1」となっている場合,定数でアライメント数が1であるデータを置くセクションであることを示します.

次に,「SU」と「SI」について説明します.これらはともにスタック領域でありますが,使用する対象が異なります.まず,SUはユーザスタック領域であり,通常処理中に積まれるスタックです.次に,SIは割り込みスタック領域であり,割り込み処理中に積まれるスタックです.

最後に,それ以外のセクションについて説明します.これらの中には,先ほど説明した接頭辞がついているものがあり,それらはその接頭辞の性質を有しています.

なお,「*」はワイルドカードであり,たとえば「W*」と書いた場合には,「W」「W_1」「W_2」をすべて含んだものになります.さらに詳しい情報は「RXファミリ C/C++コンパイラ,アセンブラ,最適化リンケージエディタ ユーザーズマニュアル」の8.1.1セクションをご覧ください.