はじめまして、YSと申します。初めて投稿させていただきます。
現在、e2studioにてターゲットデバイス:RX651、RTOS:RI600V4使用のプロジェクトを作成、コーディングを行っているのですが、
ビルド時に以下のエラーが発生して、対処方法がわからず苦慮しています。
E0562330:Relocation size overflow : "dequeue"-"PRI_KERNEL"-"00000005"
プロジェクトフォルダ下に「dequeue」に関連するファイルを探してみましたが発見できておらず、アセンブリリストファイルが何なのかが確認できませんでした。
「PRI_KERNEL」の配置アドレスはmapファイルより
PRI_KERNEL fff00400 fff04bbe 47bf 1
となっており、ソリューション実装ガイドに記載されているセクション配置内であり、配置自体には問題はないと考えています。
解決方法などわかる方がいらっしゃいましたら、ご助言いただけないでしょうか?
よろしくお願い致します。
こんにちは。NoMaYです。本件の-nostuffの他に、以下のソースファイルで推奨される-ri600_preinit_mrcというコンパイラのヘルプには未記載のコンパイラのオプションの件もあるのですね。RI600V4 リアルタイム・オペレーティング・システム ユーザーズマニュアル コーディング編「2.6 ビルド・オプションここでは,特に留意すべきビルド・オプションについて解説します。2.6.1 サービス・コール情報ファイルとコンパイラ・オプション“-ri600_preinit_mrc”。。。また,kernel.h をインクルードするファイルのコンパイル時には,オプション“-ri600_preinit_mrc” を指定してください。本オプションを指定しなくてもRI600V4 の動作に問題は生じませんが,アプリケーションで使用していないサービス・コール・モジュールがリンクされる場合があります。この場合,RI600V4 の動作に問題は生じませんが,コード・サイズが無駄に大きくなってしまうことになります。。。。」
こんにちは。NoMaYです。あと、ライブラリジェネレータで-reentというオプションの件もあるのですね。ルネサス半導体セミナー RXリアルタイムOSコース テキスト (ルネサス半導体セミナー テキスト閲覧ページ)「2.4 その他のオプション「リエントラント・ライブラリを生成する」オプションシステムでC言語の標準ライブラリ関数を使用する場合、標準ライブラリ構築ツールに対して「リエントラント・ライブラリを生成」オプション(reent)を設定する必要があります。本オプションを設定して作成したライブラリは、rand関数、srand関数を除いて全てリエントラントに実行できます。。。。」
こんにちは。NoMaYです。> (2) FITのBSPモジュールの resetprg.c のソースは何度も見ているのですけれど、一体全体何がいけないのか、さっぱり理由が思い浮かびません。そもそも、(GNURX使用時にスタックを変数定義してますが)CC-RX使用時には変数なんて何も定義してなかったような、、、今は resetprg.c の下の方に以下の記述が追加されていたのですね。
#if BSP_CFG_RTOS_USED == 4 /* Renesas RI600V4 & RI600PX *//* Definition of Kernel data section */#include "kernel_ram.h" /* generated by cfg600 */#include "kernel_rom.h" /* generated by cfg600 */#endif/* BSP_CFG_RTOS_USED */
こんにちは。NoMaYです。Trial版のプロジェクトを開いてresetprg.cの個別コンパイルオプションを解除してセクション設定を調整したところ以下の画面コピーの通り同じリンクエラーを発生させるところまで出来ました。
こんにちは。NoMaYです。調査の為に一旦resetprg.cの個別コンパイルオプションの-nostuffを戻してリンクエラーが出ないようにして、マップファイルを参照してリンクエラー時にE0562330:Relocation size overflowとなったと推測される箇所を推測してみました。以下の画面コピーの2枚目の赤枠箇所です。
こんにちは。NoMaYです。原因の可能性が見えてきたので、試しに、先ほどリンクエラーとなった設定でセクションの配置順だけを変更して、それでもリンク出来るようにしてみました。以下、画面コピーです。
こんにちは。NoMaYです。今回の件は以下のようなことではないだろうかと私は推測しました。■ RI600V4カーネルのアセンブラソース内に変数のアドレスの大小関係(並び順)を決め打ちして最適な命令を選んで記述している箇所があると推測される⇒ その命令ではベースとなるレジスタからの正のオフセットでしか変数をアクセス出来ない(そういう命令を選んでいた)⇒ resetprg.cに-nostuffを付けてコンパイルすると決め打ちした通りの変数のアドレスの大小関係(並び順)で変数が配置される⇒ しかし-nostuffを付けないとリンカの-startの指定に従って変数が配置されて場合によってはくだんのオフセットが負になることもある⇒ そのような場合に、くだんの命令では正のオフセットしか許されていないので、リンク時にE0562330:Relocation size overflowとなった了以下、RXファミリ ユーザーズマニュアル ソフトウェア編の画面コピーです。www.renesas.com/jp/ja/support/document-search?doc_file_all_types%5BManual%5D=Manual&doc_file_all_types%5BManual+-+Software%5D=Manual+-+Software&doc_category_tier_1=467666&doc_category_tier_2=469296&doc_category_tier_3=&doc_category_tier_4=&doc_part_numbers=&title=%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E7%B7%A8&sort_order=DESC&sort_by=field_document_revision_date#documentation-tools-results[関連リンク]ルネサス RXファミリ用リアルタイムOS [RI600V4] 製品ページwww.renesas.com/jp/ja/software-tool/ri600v4-real-time-os-rx-familyルネサス 半導体セミナー テキスト閲覧ページwww.renesas.com/jp/ja/support/training/seminar/document