RL78G13 でデータフラッシュライブラリを使用していますが、添付画像のように uint32_t の取得で値がおかしくなります(偶数アドレスデータが 0x00 になる?)。
SETTING_STORAGE は下記の構造です。
原因がお判りの方がいらっしゃいましたら、お教え願えないでしょうか?
よろしくお願いいたします。
物理アクセスで1バイト単位のみとか、2バイト単位のみとか、次のアクセスまでに待ち時間が必要とか、何かしらの制限があって、それが原因で発生している症状かなと思いました。
実際に動作を見てみました。
データフラッシュには、
A1 ~ A8のデータを入れておき、
高橋さまと(多分大体)同じようなプログラムで、変数にアクセス
してみました。ES:[DE]が 0xf1006 です。0xf1006のデータを、MOVW命令で、AXにコピーしています。
コピー結果は、0x00A7になっているので、この時点で偶数アドレスのデータは失われています。
ハードウェアマニュアルを見ると、データフラッシュは、8ビットアクセスのみ可能とあります。MOVW命令(16ビット)でアクセスしているために、データが失われています。8ビットアクセスになる様に(=MOV命令で)アクセスする必要があると思います。
Yamamoto さん
有益な情報、ありがとうございます。
データ・フラッシュは8ビット単位でのみアクセス可能というのは、見落としていました。
そうゆうことでしたか。
memcpy でコピーできるとということは、CS+ の memcpy は 8bit アクセスしかしていないのでしょうかね。
ワードバウンダリまで 8bit コピーした後ワードアクセスでコピーするというのが memcpy の良くある実装ですが...
しかしながら、memcpy での 8bit アクセスは保証されないと思うので、別途コピー関数を作ろうと思います。
ありがとうございました。