リセットで初期化されないRAMセクション

リセットで初期化されないRAMセクションを作りたいのですが、

プログラム宣言

#pragma section @@DATA IRAM
unsigned char IRAMH[5];
#pragma section @@DATA @@DATA

リンクディレクティブ宣言

MEMORY RAM : ( 0FDF00H, 001F10H )
MEMORY IRAM : ( 0FFE10H, 000010H )
MEMORY RAM_SADDR : ( 0FFE20H, 0001E0H )

として、コンパイルは通ったのですが、IRAMH配列が

FFE10Hに配置されていない。

何処がおかしいのでしょうか?

Parents
  • チョコです。

    #pragma section では、セクション名をIRAMに変更し、

    リンクディレクティブのMEMORY IRAM で領域名を設定しただけです。

    このセクショ名と領域名に関係はありません。

    セクションを特定の領域に配置するには、リンクディレクティブの

    セグメント配置宣言を行う必要があります。

    リンクディレクティブでは、(MEMORY IRAMはなくして、)以下のように

    セグメント配置を宣言するだけで、IRAMセクションはFFE10Hに配置できる

    はずですが。

    MERGE IRAM : AT ( 0FFE10H )

  • > リセットで初期化されないRAMセクション

    RAMパリティ・エラー検出機能に注意ですね。

  • チョコさんありがとうございます。解決しました。

    RAMパリティエラーについては、「使用するRAM領域の先頭+10バイト」でなければ

    問題ないですよね。

  • > RAMパリティエラーについては、「使用するRAM領域の先頭+10バイト」でなければ問題ないですよね。

    『RL78/G13 ユーザーズマニュアル ハードウェア編』 114頁

    > RAMパリティ・エラー・リセット発生を許可(RPERDIS = 0)で使用する場合, データ・アクセス時は「使用するRAM領域」を,RAM領域からの命令実行時は 「使用するRAM領域+10バイト」の領域を必ず初期化してください。

    「使用するRAM領域+10バイト」はRAM領域からの命令実行時の話で、恐らくは命令プリフェッチによる読み込みでパリティエラーが発生するのを避けるための注意であると思います。

    データ・アクセス時は「使用するRAM領域」とある通り使用する全域です。「リセットで初期化されないRAMセクション」を何かに利用するのであればそれは含まれます。

  • なるほど、初期化されないから、見た目データが正常であっても、

    パリティビットが変わっているかもという認識で良いですか?

    RAMパリティ・エラー・リセット発生を許可しなければ問題無いですよね。

Reply
  • なるほど、初期化されないから、見た目データが正常であっても、

    パリティビットが変わっているかもという認識で良いですか?

    RAMパリティ・エラー・リセット発生を許可しなければ問題無いですよね。

Children
No Data