Everything
3.4 #pragma section

#pragma sectionは,CA78K0RとCC-RLとでセクション名が異なるため,セクション名の変換処理が必要になります。ただし,セクションによってはCC-RL側に対応するセクションが存在しないケースもあるため,変換が不可能なセクションも存在します。また,変換は可能であっても機能が少し異なるものもあります。CcnvCA78K0Rではいくつかのセクションの変換時に標準エラー出力にメッセージを出力します。詳細はセクション名対応表を参照してください。

 

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

#pragma section セクション名 変更後セクション名 [AT 開始アドレス]

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

#pragma section [{text|const|data|bss}] [変更後セクション名]

 

-

「AT 開始アドレス」に相当する機能がCC-RLには存在しないため,「AT 開始アドレス」がある場合は削除し,メッセージを出力します。CC-RLでのセクションの配置は,-startオプションにて指定してください。-startオプションの詳細については,CC-RLのユーザーズ・マニュアルを参照してください。

-

「変更後セクション名」は変換せずそのまま出力します。変更後セクション名にCC-RLでは使用不可能な文字(’?’など)を使っている場合は,CC-RLではコンパイル・エラーとなります。変換後に文字列を変更してください。

-

CC-RLの#pragma sectionにおけるnear領域用のセクション名は「変更後セクション名+”_n”」,far領域用のセクション名は「変更後セクション名+”_f”」,saddr領域用のセクション名は「変更後セクション名+”_s”」となります。詳細はCC-RLのユーザーズ・マニュアルを参照してください。

-

CA78K0RのRAM配置用セクションは,CC-RLではRAMに配置できないため,メッセージを出力します。CC-RLのリンク・オプション-NO_CHECK_SECTION_LAYOUTを指定することでRAMに配置できるようになりますが,CC-RL V1.02においては,ROMデータはfar属性に変更する必要があります。

-

CC-RL側に対応するセクションがないため変換できない場合は,メッセージを出力し,変換しません。CC-RLではワーニングを出力し,#pragma指令を無視します。後述のセクション対応表に従い,Cソースを修正してください。

 

[例]

パターン1

(正常に置換)

変換前

#pragma section @@CODE MY_CODE

変換後

#pragma section text MY_CODE

パターン2

(ATの削除)

変換前

#pragma section @@CODE MY_CODE AT 0x2000

変換後

#pragma section text MY_CODE

パターン3

(置換後コンパイル・エラー)

変換前

#pragma section @@CODE ??CODE AT 0x2000

変換後

#pragma section text ??CODE

対応

変換しますが,コンパイル時にエラーとなります。

セクション名を変更してください。

パターン4

(置換不可能)

変換前

#pragma section @@LBASE MY_BASE

変換後

#pragma section @@LBASE MY_BASE

対応

CC-RLに対応するセクションがないため,変換せず出力します。

セクション対応表に従い,修正してください。

 

表 3.3

セクション名対応表

CA78K0R

セクション名

説明

CC-RL

セクション

種別

CcnvCA78K0Rの動作

変換後の対応

@@CODE

@ECODE

コード部用セグメント

(near領域配置)

text

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_n”」となります。

@@CODEL

@ECODEL

コード部用セグメント

(far領域配置)

text

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_f”」となります。

@@CODER

@ECODER

RAM配置コード部用

セグメント

text

対応したセクション種別に変更しますが,CC-RLではコード・セクションをRAMに配置できないため,メッセージを出力します。

CC-RLにてセクションをRAMに配置するには,リンク・オプション-NO_CHECK_SECTION_LAYOUTを指定してください。

@@LCODE

@LECODE

ライブラリ・コード用

セグメント

(near領域配置)

text

変換しません。

#pragmaを削除してください。

CC-RLでのライブラリの配置は,リンク・オプション-ROmで指定してください。

@@LCODEL

@LECODEL

ライブラリ・コード用

セグメント

(far領域配置)

text

変換しません。

#pragmaを削除してください。

CC-RLでのライブラリの配置は,リンク・オプション-ROmで指定してください。

@@LCODER

@LECODER

RAM配置

ライブラリ・コード用

セグメント

text

変換しません。

#pragmaを削除してください。

CC-RLでのライブラリの配置は,リンク・オプション-ROmで指定してください。

CC-RLにてセクションをRAMに配置するには,リンク・オプション-NO_CHECK_SECTION_LAYOUTを指定してください。

@@CNST

@ECNST

ROMデータ用

セグメント

(near領域配置)

const

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_n”」となります。

@@CNSTR

@ECNSTR

RAM配置

ROMデータ用

セグメント

(near領域配置)

const

対応したセクション種別に変更しますが,CC-RLではROMデータをRAMに配置できないため,メッセージを出力します。

#pragmaを削除してください。

CC-RLではnear領域配置のROMデータをRAMに配置する方法はありません。RAMに配置する場合は,対象セクションの変数をfar属性に変更してください。

@@CNSTL

@ECNSTL

ROMデータ用

セグメント

(far領域配置)

const

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_f”」となります。

@@CNSTLR

@ECNSTR

RAM配置

ROMデータ用

セグメント

(far領域配置)

const

対応したセクション種別に変更しますが,CC-RLではROMデータをRAMに配置できないため,メッセージを出力します。

CC-RLにてセクションをRAMに配置するには,リンク・オプション-NO_CHECK_SECTION_LAYOUTを指定してください。

@@R_INIT

@ER_INIT

初期化データ用

セグメント

(near変数)

data

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_n”」となります。

@@RLINIT

@ERLINIT

初期化データ用

セグメント

(far変数)

data

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_f”」となります。

@@R_INIS

@ER_INIS

初期化データ用

セグメント

(sreg変数)

data

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_s”」となります。

@@CALT

callt関数テーブル用

セグメント

なし

メッセージを出力し,変換しません。

#pragmaを削除してください。

CC-RLではセクション名を変更できません。

@@VECTnn

@EVECTnn

ベクタ・テーブル用

セグメント

なし

変換しません。

#pragmaを削除してください。

CC-RLではセクション名を変更できません。

@EXTxx

フラッシュ領域

分岐テーブル用

セグメント

なし

変換しません。

#pragmaを削除してください。

CC-RLには対応する機能がありません。処理の見直しが必要です。

@@BASE

@EBASE

callt関数・割り込み関数用

セグメント

text

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_n”」となります。

@@LBASE

ライブラリcallt関数用

セグメント

text

変換しません。

#pragmaを削除してください。

CC-RLでのライブラリの配置は,リンク・オプション-ROmで指定してください。

@@INIT

@EINIT

データ領域用セグメント

(near変数,初期値あり)

なし

メッセージを出力し,変換しません。

#pragmaを削除してください。

ROMからRAMへマップするセクションは,リンク・オプション-ROmで指定してください。

@@INITL

@EINITL

データ領域用セグメント

(far変数,初期値あり)

なし

メッセージを出力し,変換しません。

#pragmaを削除してください。

ROMからRAMへマップするセクションは,リンク・オプション-ROmで指定してください。

@@INIS

@EINIS

データ領域用セグメント

(sreg変数,初期値あり)

なし

メッセージを出力し,変換しません。

#pragmaを削除してください。

ROMからRAMへマップするセクションは,リンク・オプション-ROmで指定してください。

@@DATA

@EDATA

データ領域用セグメント

(near変数,初期値なし)

bss

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_n”」となります。

@@DATAL

@EDATAL

データ領域用セグメント

(far変数,初期値なし)

bss

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_f”」となります。

@@DATS

@EDATS

データ領域用セグメント

(sreg変数,初期値なし)

bss

対応したセクション種別に変更します。

不要です。

CC-RLでのセクション名は「変更後セクション名+”_s”」となります。

@@BITS

@EBITS

boolean,bit型変数用

セグメント

なし

メッセージを出力し,変換しません。

#pragmaを削除してください。

CC-RLでは_Bool型として,他のデータと同じセクションに配置されます。