リセットで初期化されないRAMセクションを作りたいのですが、
プログラム宣言
#pragma section @@DATA IRAMunsigned char IRAMH[5];#pragma section @@DATA @@DATA
リンクディレクティブ宣言
MEMORY RAM : ( 0FDF00H, 001F10H )MEMORY IRAM : ( 0FFE10H, 000010H )MEMORY RAM_SADDR : ( 0FFE20H, 0001E0H )
として、コンパイルは通ったのですが、IRAMH配列が
FFE10Hに配置されていない。
何処がおかしいのでしょうか?
チョコです。
#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パリティ・エラー・リセット発生を許可しなければ問題無いですよね。