dポイントプレゼントキャンペーン実施中!

toppers/JSPにて組込みファームウェアの開発を行っております。

toppers/jspのメモリ空間アクセス関数でuint32_t sil_rew_mem(void* mem)にて、メモリアクセスを行うと、
memによるメモリアドレス指定が、4の倍数の場合は正常にデータが読込めますが、
4の倍数以外の2の倍数の場合は、繰り下げられた4の倍数の値が読込まれます。

つまり、
Address  : Data
0x0000 : 0x12345678
0x0004 : 0x9ABCDEF0
を書込み後、

0x0000 を sil_rew_memで読込むと、正常に0x12345678が読込まれます。
しかし、0x0002をsil_rew_memで読込んでも、同様に0x12345678が読込まれます。

この関数は、このような仕様なのでしょうか?
どなたかご存知の方は、ご回答をよろしくお願いいたします。

A 回答 (2件)

こんにちは。


仕様と言いますか、jsp/include/sil.hあたりにズバリ定義されていないでしょうか。

何のプロセッサを使っているかはわかりませんが、ロングワードアクセスを行う場合は、4の倍数以外のアドレスにアクセスできないという事は、きょうび普通です。
sil_rew_memで避けられているという事は、お使いのプロセッサにも、この禁忌があるという事ですので、ご希望の事をなさりたい場合は、0x0002と、0x0004から、2回に分けてsil_reh_memする必要があります。
    • good
    • 0
この回答へのお礼

pyonmaeさん

どうもありがとうございます。
まだまだ、知識足らずです。
今後ともよろしくお願いいたします

お礼日時:2010/12/07 17:52

32ビット単位の読み書きなのでアドレスも32ビット境界なんだろうなと理解します


memの下位2ビットが無視されるのでしょう
そういう仕様のCPUも多いです
    • good
    • 0
この回答へのお礼

php504さん。

回答ありがとうございました。
まだまだ、知識足らずです。
今後ともよろしくお願いいたします

お礼日時:2010/12/07 17:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!