はじめまして、YSと申します。初めて投稿させていただきます。
現在、e2studioにてターゲットデバイス:RX651、RTOS:RI600V4使用のプロジェクトを作成、コーディングを行っているのですが、
ビルド時に以下のエラーが発生して、対処方法がわからず苦慮しています。
E0562330:Relocation size overflow : "dequeue"-"PRI_KERNEL"-"00000005"
プロジェクトフォルダ下に「dequeue」に関連するファイルを探してみましたが発見できておらず、アセンブリリストファイルが何なのかが確認できませんでした。
「PRI_KERNEL」の配置アドレスはmapファイルより
PRI_KERNEL fff00400 fff04bbe 47bf 1
となっており、ソリューション実装ガイドに記載されているセクション配置内であり、配置自体には問題はないと考えています。
解決方法などわかる方がいらっしゃいましたら、ご助言いただけないでしょうか?
よろしくお願い致します。
YSさん、こんにちは。NoMaYと申します。おそらく、以下のことなのだと思うのですが、ソースが見当たらないということで、RTOS:RI600V4のバイナリライブラリ内で発生していることでしょうけれども、ひとまず以下に記載されている回避策を試されてはどうでしょうか?(あるいは、もう既に参照されていた上での質問かも知れませんけれども。)初学者さんということで、自分では無理だと感じたら、ビルド環境一式(ソース込み)をルネサスさんに提出して、ルネサスさんに解決して貰うしか無いかな、と、私は思うのです。RI600V4を購入されて、お金を払っていれば、今回の件を解決してもらうぐらいの権利はあるのではないかな、と、私は思うのです。11.4 最適化リンケージエディタにおいて最適化有効時のE0562330エラー発生の回避tool-support.renesas.com/autoupdate/support/onlinehelp/ja-JP/csp/V8.06.00/CS+.chm/Compiler-CCRX.chm/Output/ccrx11c0400y.html[追記]もうひとつこちらの可能性もあるかも知れません。FAQ 1011150 : CC-RX V2コンパイラを使用時、次のエラーが出力されます。回避方法を教えてください。E0562330:Relocation size overflow : "ファイル名.obj"-"セクション名"-"00000025"ja-support.renesas.com/knowledgeBase/17796702
NoMaYさん。こんにちは、YSです。
アドバイスいただきありがとうございます。
ご提供いただいた2件の情報を参照の上、分岐幅の変更や最適化リンケージエディタの最適化抑止を行ってみましたが、解決できていません。記載いただいているように、ルネサスさんにご相談して解決するようにしたいと思います。
NoMaY さんの示されたFAQが答えだと思います。
リンクした結果、24bitの分岐命令では届かなくなってしまったから32bitの分岐命令で実装しなおしてください、がエラーの意味する所でしょう。コンパイルする時点では24bit命令になっているものを、リンクの段階で32bitに差し替えるのは難しいから現状そうなっているのでは。オプションを変えてコンパイルし直すか、セクションの配置を工夫して24bitのままで届くようにするか、どちらが良いかはケースバイケース。
YSさん
こんにちは、シェルティです。ルネサスの中の人です。
カーネルはライブラリ提供なので、ほやさんが提示された「セクションの配置を工夫して24bitのままで届くようにする」が実際の対処方法になります。
RI600作った人に聞いてきました。以下回答でした。
---
タスク/ハンドラ/ユーザ・オウン・コーディング部をカーネル(PRI_KERNEL)から24ビット相対の範囲内に配置してみてください。
カーネルのアセンブラ・ソースではBSR命令などに分岐距離指定子(length)を使用していません。そのため、カーネルのライブラリを作成時に、下記のCC-RX仕様に従って"BSR"命令が"BSR.A"(24ビットPC相対)のコードにアセンブルされます。これにより、タスク/ハンドラ/ユーザ・オウン・コーディング部がカーネル(PRI_KERNEL)から24ビット以上離れているとリンク・エラーになります。
CC-RXコンパイラ ユーザーズマニュアル https://www.renesas.com/document/mat/cc-rx-compiler-users-manual-rev110?language=ja&r=1169511 5. アセンブラ言語仕様 5.1.9 分岐命令の最適選択 (2)相対サブルーチン分岐命令(BSR)の最適選択 (b)最適選択 - アセンブラでは相対サブルーチン分岐命令のオペランドが分岐最適化対象条件を満たす場合、最短の分岐距離を選択します。 条件については、「5.1.4 (3) 分岐距離指定子」を参照してください。 - 条件を満たさないものについては、24ビットPC相対(.A)を選択します。
以上です
シェルティさん、こんにちは。YSです。
アドバイスいただきありがとうございます。頂いた情報含め、マニュアル等を改めて確認したところ、RI600V4のユーザーズマニュアル コーディング編に
2.6.2 ブート処理ファイルのコンパイラ・オプション
「16.2.3 ブート処理ファイルのコンパイラオプション」に記載のように、ブート処理ファイル(サンプル・プロジェクトでは"resetprg.c")にはオプション"-nostuff"を設定する必要があります。そうでない場合、RI600V4は正常に動作しません。
の記載があることを見落としていました。
(前投稿の編集がなぜかできないので分割投稿させていただきます)
ブート処理ファイルにオプション"-nostuff"を設定することにより、ビルドエラーは発生しなくなりました。"-nostuff"によりブート処理関連の変数をアライメント数が4のセクションに配置する必要があったようです。
マニュアル記載の手順通りに対応できておらず、非常に反省しています。皆様にお手数を掛けさせてしまい申し訳ございませんでした。
シェルティです。こんにちは。
なるほど、そちらが原因でしたか。普遍的な課題なのですが "汎用的な" マイコン製品はそのマニュアルも汎用的であるべきでして、それ用のソフトウェアのマニュアルも汎用的であるべきでして、作り手として言うのもあれなのですがあらゆる事態を想定してマニュアル作りする故に、大辞典のようなマニュアルになりがちですね。
なので初見ユーザさんの敷居がどうにも高くなりがちです。ここ数年でこれをツール(特にスマートコンフィグレータ)で解消しようという試みを続けておりまして、リアルタイムOSもスマートコンフィグレータを使って簡単に構成できるようにしてまいりました。RI600についても本件から何か改善事項がないか考えてみたいと思います。
色々ご不便おかけすることもあるかもしれませんがまた不明点ありましたらご質問ください。シェルティが可能な範囲で関係者に聞きまわって回答を持ってきます。RXとRL78向けのソフトを古くから作っていますので回答を持ってこれる可能性が高いのはこの2ファミリですね。