Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

リンクオプション -lib_rename について

こんにちは。あさたろうと申します。

CPU : R5F566TEBxFP(RX66T)
開発環境 : CS+ for CC V8.01.00 [03 Dec 2018]
ビルドツール : CCRX V3.01.00

プロジェクトでリンクするライブラリのセクションを、-lib_renameリンクオプションで別のセクションに割り付けると動作しなくなります。

オプションを指定しない場合と、指定した場合とでマップファイルを比較すると、Rセクションに割り付けられていた変数がDxxxセクションに割り付けられてしまって動作しないことが判りました(xxxは、オプションで指定した変更後の名前)。

-lib_renameによる指定で、ライブラリを別セクションに正しく割り付けるには、どのように設定すればよいでしょうか?

ライブラリを利用するアプリケーションと別のセクションにして欲しいというのは、お客様からの要望です。

どうぞよろしくお願いいたします。

 

現象を確認可能なプロジェクトを作成したのですが、サイズ制限で全て添付できませんでした。
プロジェクトから、スマート・コンフィギュレータで生成される r_bsp, r_config, r_pincfg フォルダを
削除したものを添付しています。
スマート・コンフィギュレータの設定ファイルは含んでいますので、そちらから生成しなおせばビルド
できるのではないかと思います。section.zip
北斗電子のHSBRX66T100Bボード用です。

 

  • あさたろう さん、こんにちは。NoMaYです。#私のPCが古過ぎてCC-RX V3.01が動かなくて推測ですけど。

    これは、あと、以下の2手順が必要なのではないでしょうか、、、

    (1) CS+のリンクオプションの[ROMからRAMへマップするセクション]に以下の赤文字行を追加

    D=R
    D_1=R_1
    D_2=R_2
    Dxxx=Rxxx
    Dxxx_1=Rxxx_1
    Dxxx_2=Rxxx_2

    (2) BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下の赤文字行を追加

    /* Section start */
    #pragma section C C$DSEC

    extern st_dtbl_t const _DTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("D_8"), __secend("D_8"), __sectop("R_8") },
    #endif
        { __sectop("D"), __secend("D"), __sectop("R") },
        { __sectop("D_2"), __secend("D_2"), __sectop("R_2") },
        { __sectop("D_1"), __secend("D_1"), __sectop("R_1") },
        { __sectop("Dxxx"), __secend("Dxxx"), __sectop("Rxxx") },
        { __sectop("Dxxx_2"), __secend("Dxxx_2"), __sectop("Rxxx_2") },
        { __sectop("Dxxx_1"), __secend("Dxxx_1"), __sectop("Rxxx_1") }
    };

    [追記]

    あと、BSSセクションの名前も変更されているのであれば、以下も必要かなと思います。

    (2') BSPモジュールのソースのsrc\smc_gen\r_bsp\mcu\all\dbsct.cに以下を追加

    /* Section start */
    #pragma section C C$BSEC

    extern st_btbl_t const _BTBL[] = {
    #ifdef BSP_MCU_DOUBLE_PRECISION_FLOATING_POINT
        { __sectop("B_8"), __secend("B_8") },
    #endif
        { __sectop("B"), __secend("B") },
        { __sectop("B_2"), __secend("B_2") },
        { __sectop("B_1"), __secend("B_1") },
        { __sectop("Bxxx"), __secend("Bxxx") },
        { __sectop("Bxxx_2"), __secend("Bxxx_2") },
        { __sectop("Bxxx_1"), __secend("Bxxx_1") }
    };

     

  • わわいです

    初期値付きの変数のセクションというのは、他のセクションと違って色々ややこしいです
    ①変数エリアのためにRAMにマップしなければいけませんが、このエリアを初期化するためのデータはROMのエリアに確保しないといけません
    ②そして、初期値データをRAMエリアに、あらかじめ転送しておいてプログラムを開始する必要があります

    -lib_renameによる指定でセクション名を追加変更するのはいいですが、コレを変更するんであれば、
    上記①②も一緒に追加変更しないとうまく動きません

    そこらへんの解説は、お使いのコンパイラのマニュアルに書いてありますんでよく読んでみてください
  • > 現象を確認可能なプロジェクトを作成したのですが、サイズ制限で全て添付できませんでした。

    管理人様お勧めの方法が↓だそうです。

    japan.renesasrulz.com/.../20996
    > なお、添付ファイルのサイズは上限1MB程度ですので、それ以上のサイズのファイルをアップロードしたい場合は、かふぇルネー>サンプルプログラム等 にファイルをアップロードして、スレッド書込みではここにリンクを付けるなどの工夫が必要です。
  • NoMaY様 わわい様 fujita nozomu様

    お世話になります、あさたろうです。
    NoMaY様に教えていただきました方法で、動作しました。

    (1) だけ設定すると、わわい様の仰るように変数が初期化されず(正しく動作しない)、
    (2) も設定すると、変数が初期化されて意図した動きになりました。

    修正して動作するようになったプロジェクトを fujita 様の情報を元に「サンプルプログラム等」にアップしようかと思ったのですが、NoMaY様の情報のみで十分かと思い直し、3Mbyte以上の容量を消費することは止めました。

    今回もまた早々に解決して頂き、誠にありがとうございました。
    ---
    あさたろう

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page