AP-RZT2-0Aの評価ボードをもとに、付属の16MByteのSDRAMを32MByteに変更して実装しております。
特定の変数をSDRAMにマッピングしたくセクションを追加して、変数を宣言しました。1.fsp_ram_execution.ldファイルのSECTIONSを下記内容を追記し、 c3_dataセクションを定義しました。
.c3_data : { . = ALIGN(CS3_SPACE_PRV_LENGTH); } > CS3_SPACE
2.Cコードにて、下記のように変数宣言しました。 unsigned short __attribute__ ((section (".c3_data"))) SimulationCsvData2[2000 * 120][0x80];
ビルドしたところ下記エラーが発生します。
ld.exe: ap_rzt2_0a_ethernet_sample.elf section `.c3_data' will not fit in region `CS3_SPACE'ld.exe: region `CS3_SPACE' overflowed by 44662784 bytes
メモリが足りずオーバーフローするとのエラーメッセージと思われますが、メモリは足りております。
開発環境は、Renesas e² studioを使用して、GNU ARM Embeddedのツールチェーンを使用しています。
何かアドバイス頂けるようお願いします。
わわいです
> 2.Cコードにて、下記のように変数宣言しました。> unsigned short __attribute__ ((section (".c3_data"))) SimulationCsvData2[2000 * 120][0x80];
これ、2000*120*128*2 で、61440000byteのサイズがあります。
完全に容量オーバーになってしまってますね
早急に回答していただき、ありがとうございます。
現在、32Mbyte/16bitのSDRAM2枚に対してCS2、CS3でのアクセスを考えております。
こういった場合、どういった実装、あるいは考え方をすればよいでしょうか?
データは容量的にも分ける方向になるとは思います。
RZは内蔵メモリでしか使ったことないのであんましアレですが。。
メモリ2組をCS2、CS3で使うということですが、それが64Mバイトの連続したアドレスとして使えるのなら、元質問の変数の領域確保は可能となります。
が、アドレスが分割されるとなると、たんに32Mバイトのエリアが2組あるだけ、ってことになりますんで、それに合わせた変数宣言が必要となります。
教えていただき、ありがとうございます。
32Mバイトチップが2つで64Mバイト、これを一括で確保したいと言う要望ということでしょうか?
CS0/2/3/5の4つぶら下げることのできるさきに個別で64Mバイト割り当てですので例えば32Mバイトチップの割り当て場所を
1つ目後半、2つ目前半にしてリンカ設定でセクションを跨いで確保できそうな気はします。
回答ありがとうございます。
そういう設定が出来れば連続して扱えるので便利なのですが
すみません、環境を使い始めたばかりなのでピンと来ていません。