コードフラッシュ領域のあるアドレスを参照しているのにミラー領域を参照している?

こんにちは。

題目のとおり、コードフラッシュ領域のアドレス(例として0x01000番地)の値を参照していますが、0x01000番地に格納されている値ではなく、0xF1000番地の値を参照してしまっており、なぜこうなるのか悩んでおります。

 

マニュアルを見ていると、0x00000~0x05FFFのコードフラッシュ領域を0xF0000~0xFFFFFにミラーさせていて、ミラー先を参照することで短いコードで読出しを行えるとのことです。

このミラーしていることが関係していそうな気もするのですが、、、どうなのでしょうか。

 

①この機能はミラー先を参照するものであり、ミラー元(0x00000~0x05FFFF)を参照しても特に支障はないという認識なのですが、間違っているでしょうか。

②添付画像のように、0x01000番地の値を読みたいのに、0xF1000番地の値が読めてしまう原因は何が考えられるでしょうか。

 

よろしくお願いします。。。

Parents
  • チョコです。
    ほとんどが,fujitaさんとダブりますが,一部原因のネタバレを書いておきます。
    >①この機能はミラー先を参照するものであり、ミラー元(0x00000~0x05FFFF)を参照しても特に支障はないという認識なのですが、間違っているでしょうか。
    参照している記述の下にある例を見ると明確にF1000~F1FFFはデータフラッシュ領域であり,ミラー領域ではありません。ミラー領域はF2000~FEEFFとかいてありますよ。
    以前,ルネサスの人にクレームをつけたときに,「0000H-0FFFFHをF0000H-FFFFFHへミラー」という記述は,全てのRL78で共通に使っている考え方だけを示している共通の文言であり。個々のデバイスのマニュアルには,その下のメモリマップに具体的なアドレスが書いてあるので,間違えることはないと言い切ってましたけど。

    >②添付画像のように、0x01000番地の値を読みたいのに、0xF1000番地の値が読めてしまう原因は何が考えられるでしょうか。
    0x01000番地はミラー領域ではないので,単にnearで0x1000をアクセスしたから0xF1000の値(データフラッシュの値)が読めただけです。どうしても0x1000読みたければ,farでアクセスすべきです。
Reply
  • チョコです。
    ほとんどが,fujitaさんとダブりますが,一部原因のネタバレを書いておきます。
    >①この機能はミラー先を参照するものであり、ミラー元(0x00000~0x05FFFF)を参照しても特に支障はないという認識なのですが、間違っているでしょうか。
    参照している記述の下にある例を見ると明確にF1000~F1FFFはデータフラッシュ領域であり,ミラー領域ではありません。ミラー領域はF2000~FEEFFとかいてありますよ。
    以前,ルネサスの人にクレームをつけたときに,「0000H-0FFFFHをF0000H-FFFFFHへミラー」という記述は,全てのRL78で共通に使っている考え方だけを示している共通の文言であり。個々のデバイスのマニュアルには,その下のメモリマップに具体的なアドレスが書いてあるので,間違えることはないと言い切ってましたけど。

    >②添付画像のように、0x01000番地の値を読みたいのに、0xF1000番地の値が読めてしまう原因は何が考えられるでしょうか。
    0x01000番地はミラー領域ではないので,単にnearで0x1000をアクセスしたから0xF1000の値(データフラッシュの値)が読めただけです。どうしても0x1000読みたければ,farでアクセスすべきです。
Children
No Data