お世話になっています。太郎です。
以前投稿させて頂いたテレワーク対応としてR5F563NBDxFCから、RX65N Target Boardへ既存PGの移植を行った際セクション指定をしている変数へ値が設定できない事象が発生しました。(未初期化セクション領域)単純に、セクション指定を外せば自動的に割り当てられるかもと試したりしても動作しません。
そもそもセクション指定の意味・意義が分からず。調べるとやり方は見つかるものの、利点/なぜやるのかは見つけられませんでした。(おそらくコンパイラ ユーザーズマニュアルが回答に近いのでしょうか)
こういったことについて、1つ1つをQAでお尋ねするのは宜しくないとは思うので、Web上やQAから出来る限り探しているのですが中々辿り着けなかったり、1つ1つの単語が不明だったりします。私のようなPC/スマホ/サーバ等の、OSありきのプログラムばかり学んできた者は数多く居ると思うのですが、その辺りのの人間でもとっつけるような書籍やWebサイトなどがあればご紹介いただけないでしょうか。。。(スタートアッププログラムとか、ベクタテーブルあたりも学ぶ必要があると思っています。)
尭さん、こんにちは。太郎です。個々に細かくご教示いただきありがとうございます。「リンカ・ローダ実践開発テクニック」も購入してみます!基本的にはセクションは自動振分されると思うのですが、わざわざ指定するのは何故なのでしょうI/Oを直接使用する場合、アドレス指定して値を設定するため。。。とかですかね
>>RX65Nのプロジェクトを作るときにRX63Nのプロジェクトのデータを流用しませんでしたか?ここについては行っていません。RX65NのLチカsampleに、ソースコードのみ継ぎ足す形で(セクション指定も別途行いました)
Sugachanceさん、こんにちは。太郎です。情報ありがとうございます。そのサイト、見覚えがあります。前に何かで行き詰ったときに参照していたかもです。全体は見てなかったので、これを機に全体を通して見直してみようと思います。
こんばんは。尭です。
プロジェクトの引き継ぎが原因でないとすると自ら編集した所に原因があると思いますが、核心はご自身で書いている>基本的にはセクションは自動振分されると思うのですが、わざわざ指定するのは何故なのでしょうでしょう。セクションの構成をデフォルトから変更して変数をそこに配置するのは相応の理由があるはずです。別の人から引き継いだ物であればその人に確認した方が早いかも知れません。
>その変数に値を代入しても代入できない状態なのです。(エラーも発生しない)書き込みは成功するが読み出すと書き込んだ値と違う値が読み出されるという理解であっているなら、一般的に考えられる原因は「そこにRAMがないから」だと思います。アドレスがRAMではない場所を示していたり、書き込み先が動作していない(内蔵ペリフェラルならクロックが停止されている)場合そのような現象が起きる事があります。
尭さん、こんにちは。太郎です。ありがとうございます。解決いたしました。「そこにRAMがないから」から気付きを得まして、やっと「マニュアルのアドレスマップを確認」するという考えに行きつきました。
セクション指定している先は0x07000000の外部アドレス空間でした。調べて初めて知りましたが、マイコンにも外付けRAMなる物が繋げれるのですね。私自身の知見があれば、NoMaYさんに記載いただいたアドバイスから辿っても気づけたのかもしれません。(mapファイル)
マイコン用のRAM(HY57V281620ETP-H)を買ってみることにします。足が細すぎてはんだ付け無理そうなので、プリント基板のオーダーでもしてみようかな。。。(こちらも未経験)
>>別の人から引き継いだ物であれば退職しており、有識者は誰もおりません。。。引継ぎも組込特有の部分についてはほぼ0なのです。(既存PGの微改造の仕事が多いのですが、いつか大きめの改修依頼が来たら痛い目を見そうです。。。)
いったんは解決しましたが、上記理由で有識者も居ない状態なので皆様からご教示いただいた物を中心に、継続的に勉強していきたいと思います。ありがとうございました。
こんばんは、尭です。 解決されたようでよかったです。アドレスが0x07000000ですと外部アドレス空間のCS1領域ですね。SDRAMは0x08000000からなので違います。そもそもTarget Board for RX65Nに載っているRX65Nは100pinなのでSDRAMは利用できません。RX65Nの場合SDRAMを使えるようになるのは144pin以上です。 ここからはお節介になるかもしれませんがCS1領域にアクセスするコードがあると言うことは元のRX63Nに何らかのデバイスが外付けされていると思われます。ありがちそうなケースを挙げると1.RX63Nの内蔵RAMが足りなくてSRAMが接続されている 外付けされているSRAMの容量にもよりますが、該当セクションのアドレスをRX65Nの内蔵拡張RAM(アドレスは0x00800000)に変更するだけで済むかもしれません。この領域のRAMは本来VRAM用ですが液晶を繋いだりしないのであれば任意の用途に使えます。2.SRAMではない別のデバイスが接続されている 汎用ロジックIC群に接続されている・・・市販のバスインターフェイスを持つICに接続されている・・・FPGAやCPLD等のプログラマブルロジックデバイスに接続されている・・・等々が考えられますが、この場合その変数は外部デバイスを操作するために使用されている思われます。あたりでしょうか。回路図やブロック図をみてRX63Nの外部バスに繋がっている物を確認された方が良いように思います。繋がっている物は一つとは限りません。複数のデバイスが繋がっている可能性もあります。2の場合はRX65Nに移植するのであれば外付けされている回路も再現する必要があるのではないでしょうか。
尭さん、こんにちは。太郎です。共通マニュアルであることを失念し、読み切れていなかったです。ご指摘ありがとうございます。また深い沼にハマるところでした。
元の環境をよく見てみると、以下のRAMが積まれていましたので、何かしら積まないと動作しないかと考えています。「MR4A16BYS35」MRAM 16Mb(1M x 16)パラレル 35ns 54-TSOP2
ビルド時のメッセージを見るとRAMDATA SECTION: 000f8d66 Byte(s)ROMDATA SECTION: 00003bf2 Byte(s)PROGRAM SECTION: 0001d83c Byte(s)となっており、標準RAM256Kbyte + 拡張RAM384Kbyteでは全然足りないですね。。。(約1M超え)
元々積まれているのはMRAMですが、不揮発性である必要はないのでSRAM(or DRAM)にしようと思います。秋月電子さんのカタログを見てると、あまり大きいものはないみたいです。(それで誤ってSDRAMにいきついてしまったのですが。/バイトではなくビット表記が多く微妙に苦しみました)
HM678127UHJ-12を複数積んでみようかなと考えています。
こんにちは。尭です。SDRAMを買おうとされていたので間に合って良かったです。自分自身メモリを外付けしたりマイコンが載る基板を設計したことはないのでこの辺は検討不足があるかもしれません(このレスもマニュアル等を見ながら書いています)。16Mbitのメモリが外付けされているとなると確かに内蔵RAMだけでは足りませんね。メモリを外付けする必要があると思いますがそうなると1.16Mbitか8Mbitの非同期SRAMを買ってきて接続する それなりの速度で動作させる事を考えると1MbitのSRAMチップを16個接続するのは無理があると思います。 マイコンのマニュアルに載っているSDRAMの接続例も1個か2個ですし、RX63Nに非同期SRAMを接続するアプリケーションノート(R01AN2119JJ0100)も同様ですから同程度にするのが無難でしょう。この容量の非同期SRAMとなるとDigi-Key等のディストリビュータから買うことになりそうですが欠品が目立ちますしそこそこ良いお値段しそうです。Target Board for RX65Nの場合ピンヘッダ越しの接続になるのも不安要因です。2.144pin以上のRXマイコンとSDRAMを買ってきて基板を作り実装する Target Board for RX65Nをあきらめることになりますがマルツ通販(RXマイコン)や秋月(SDRAM)等の国内流通から購入できる可能性があります。ただプリント基板の作成自体初めてとなるとマイコンを含めた基板の作成は結構なチャレンジになりそうです。あたりになるのではないでしょうか。RX65NにこだわらないのであればGR-KAEDE(RX64M)を購入するという手もあります。SDRAM搭載済みのボードですがエミュレータが搭載されていないので持っていなければ購入するか、Target Board for RX65Nを改造してE2 Lite代わりにする(基板を見た感じでは出来そうですが実際にやったことはないので出来るとは言い切れません)ことになると思います。