RX66Tの1M版を使ってデバッグしていました。正規の基板を入手したのでROM512K版でコンパイルしなおしたのですが(E) F0563100 F0563100:Section address overflow out of range : "PB_1"のエラーがでます。PB_1はどこで設定されているのでしょうか?
CS+のリンクオプションで、セクション設定でPの後にPB_1を追加することでエラーは取れました。プロジェクト内を検索してもPB_1は見つかりません。コード生成でユーザが認識できない箇所で使用しているのでしょうか?
えじ さん、こんにちは。NoMaYと申します。> プロジェクト内を検索してもPB_1は見つかりません。今回のような場合、リンカオプションでマップファイルを詳細出力に設定して、それを調べていく方が良いと思います。例えば、私の手元のプロジェクトで B_1 とかで以下のような出力がありました。そちらのプロジェクトで PB_1 を探してみると、どのようになっていますでしょうか?
SECTION=B_1FILE=DefaultBuild\RX66T_RIIC.obj 00001404 0000140d a _tx_buf 00001404 5 data ,g 1 _rx_buf 00001409 5 data ,g 1FILE=DefaultBuild\Config_RIIC0.obj 0000140e 00001411 4 _g_riic0_mode_flag 0000140e 1 data ,g 5 _g_riic0_state 0000140f 1 data ,g 7 _g_riic0_dummy_read_count 00001410 1 data ,g 1 _g_riic0_stop_generation 00001411 1 data ,g 3FILE=DefaultBuild\lowsrc.obj 00001412 00001439 28 _flmod 00001412 14 data ,g 3 _sml_buf 00001426 14 data ,g 0
返信ありがとうございます。MAPファイルで見ると、メインルーチンでコールしている関数が対象になっていましたが、PB_1はやはり設定されていません。これは勝手に設定されてしまうのでしょうか?
えじ さん、こんにちは。NoMaYです。> MAPファイルで見ると、メインルーチンでコールしている関数が対象になっていましたが、スマートコンフィグレータのソースでは無かった、という理解でいいですか?> PB_1はやはり設定されていません。これは勝手に設定されてしまうのでしょうか?#pragma sectionの文法を間違えて記述してしまった可能性もあります。正(推測):
#pragma secion B B_1
誤(推測):
#pragma secion B_1
スマートコンフィグレータのソースでは無かった、という理解でいいですか?=>はい。すみませんコンパイルができた時に確認していませんでした。#pragma sectionの文法を間違えて記述してしまった可能性もあります。=>その通りBが抜けていたようです。 正しい記載に変更後、セクション設定でのPB_1を削除してもコンパイルが正常にできました。 このような時にPB_1が勝手に設定されてしまうのですね?
えじ さん、こんにちは。NoMaYです。その点に関しては、CS+のオフラインヘルプもしくは以下のオンラインヘルプの#pragma sectionの説明を読んで頂くのが良いかな、と思うのです。推測ですけれども、PB_1 に入ってしまったのは #pragma secion B_1 の記述以降の 関数本体コード かな、と思うのです。top > コンパイラ編 > コンパイラ言語仕様 > 拡張言語仕様 > 拡張仕様の使用方法4.2.4 拡張仕様の使用方法(1) セクション切り替え記述tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V8.09.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx04c0204y.html#59329
説明ありがとうございました。色々検索してもPB_1の記載が見つからなかったので困っていたので助かりました。