Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
Other MCU/MPU Products
SH Family
More
Cancel
SH Family
SH Family Forum
外部SRAM16ビット単位アクセス
Home
Forum
Tags
More
Cancel
New
Replies
4 replies
Subscribers
447 subscribers
Views
3113 views
Users
0 members are here
コンパイラ
Embedded
High-performance
外部SRAM
workshop
4.09.01
ITRONVer4.0
Options
Share
More
Cancel
Related
外部SRAM16ビット単位アクセス
HIT
over 10 years ago
外部SRAMが16ビット単位でのアクセスしかできない
ハードで、外部SRAMをデータ領域として使用すると
挙動がおかしく、データアボートで落ちたり、参照
したデータがおかしく見えたりします。
(コード変更するたびに、状況が異なる)
データ型宣言やコンパイラの設定等で回避できる仕方
がご存じでしたら教えて頂けますか?
環境:
CPU :SH7216
デバッガ :E10-USB
コンパイラ:High-performance Embedded
Workshop 4.09.01
外部SRAM(8MB):CS0に割り当て
OS :ITRONVer4.0
標準関数(printfをシリアル入出力
(デバッグ用))
ちなみに簡易プログラムを作成しデータ領域として
試して見ると、byte型、short型、long型でも
リード、ライトができました。
アクセスする場合はshort型やlong型で定義して
いれば使用できると思っていますが、この認識は
正しいでしょうか?
エビスクラウン
over 10 years ago
HITさん、エビスクラウンです。
byte型でもリード、ライトができた? は、ちょっと疑問です。目的の変数が偶数番地、奇数番地のどちらでもOKかを確認してみてください。16ビットバスだと奇数番地はNGだと思います。
また、short型やlong型ならばOKとの認識もNGです。殆ど場合はOKですが、処理内容によってはNGとなります。例えば、
short a;
a/256
a%256
等とした場合、最適化によっては上位バイトのみリード、下位バイトのみリードの結果が出る可能性があります。SHの場合、volatile型修飾子を指定することでアクセスサイズが必ず守られるようになります。 従いまして、volatile型修飾子の指定が必要と言うことになります。
Cancel
Up
0
Down
Reply
Cancel
HIT
over 10 years ago
エビスクラウンさん
早速の回答ありがとうございます。
byte型は奇数アドレスでOKですが、
short型は奇数アドレスがNGで
long型は4の倍数以外はNGでした。
volatile型修飾子の指定することは
コンパイラの最適化を抑止し、明示的に
偶数アドレスに割り当てれば奇数アドレス
へのアクセスを回避できると言う意味
ですね。
出来たらプログラマが意識せずにコンパイラ
の設定で出来たらと思いましたが、やはり、
意識的に奇数アドレスをアクセスしないように
するしか方法はないのですね。
了解しました。
Cancel
Up
0
Down
Reply
Cancel
エビスクラウン
over 10 years ago
HITさん、エビスクラウンです。
それならば「外部変数のvolatile化」のオプションを使ってはどうでしょうか? プログラマが意識しなくても、外部変数は自動的にvolatile宣言されたのと同じ効果が得られます。
設定は、ビルド⇒SuperH RISC...Standard Toolchain⇒コンパイラのタブ⇒カテゴリは最適化⇒詳細ボタン⇒外部変数のタブにある「外部変数のvolatile化」のチェックボックスです。
ただし、目的のオプションを設定したソースファイル内の全ての外部変数が最適化抑止となります。つまり、最適化を実施したい外部変数まで最適化抑止の対象となることはご理解ください。
Cancel
Up
0
Down
Reply
Cancel
HIT
over 10 years ago
エビスクラウンさん
Volatile化がコンパイルオプションでできるのですね。
早速試してみます。
ありがとうございました。
Cancel
Up
0
Down
Reply
Cancel