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

ブート-フラッシュ領域を分割したプロジェクトでのROM化

はじめて質問します。あさたろうと申します。

使用している開発ツールは、「CS+ for CA,CX V4.01.00 [28 Nov 2017]」です。

RENESAS提供の資料「ブート-フラッシュ領域の分割方法(R20UT3040JJ0100)」
を参考にしてブートプロジェクト(boot)とメインプロジェクト(appmain)に
分けています。

このプロジェクトについて、「ROM化の指定方法(R20UT3041JJ0100)」
という資料に書かれた設定を行いました。

すると、boot側は、boot.map,romp.mapともに、_rcopy()がブート領域
内に割り付けられました。

ところが、メインのプロジェクト側では app_main.mapに_rcopy()は
現れず、romp.mapではブート領域(0~2000h)でなくフラッシュ領域
に_rcopy()が割り付けられてしまいます。

メインのプロジェクトでは、ビルド・ツールのプロパティで「オブジェクト
・コンバート・オプション」→「ヘキサ・ファイルを分割する」→「はい」
に設定していて、ブート側とメイン側とでヘキサファイルが以下のように
分割されるのですが。。。

メインプロジェクトのブート側ヘキサファイル(appmain.hxb)が、
ブート側のヘキサファイル(boot.hex)と同じものになりません。

appmain.hxbとboot.hexが同じになるように設定する方法を教えて
ください。

ーーー
あさたろう

  • In reply to NoMaY:

    あさたろう さん、こんにちは。NoMaYです。

    前の私の投稿の、何か別の差異がでてました、ですが、すみません、うっかりメイン側プロジェクトをビルド→BOOT側プロジェクトをビルド、としていたせいでした。正しい順序であるBOOT側プロジェクトをビルド→メイン側プロジェクトをビルド、としたところ(つまり今回のプロジェクトで素朴にリビルドしたところ)差異は無くなりました。

  • In reply to NoMaY:

    NoMaY様

    教えていただいたように設定して、メイン側プロジェクトとブート側プロ
    ジェクトとで同じアドレスに_copy()が割り付けられるようになりました。

    すぐに問題が解決して、感動しています。
    ほんとうに皆様、貴重なお時間をいただきまして申し訳ありません。

    ありがとうございました。

    ---
    あさたろう
  • In reply to NoMaY:

    こんにちは。NoMaYです。当事者以外には良く分からなかったと思いますので少し補足してみます。

    今回の件は、CA78K0Rのリンカの便利機能の1つである「ブート-フラッシュの再リンク機能」に関するもので、リンク済みのプログラムに対して更にリンクが出来る機能のことです。概念的に書けば以下のようなリンクが出来るという機能です。(なお、正確にはCA78K0Rでは、absではなくlmfであり、objではなくrelです。)

    boot.abs ← boot_main.obj + a.obj + b.obj
    main.abs ← boot.abs + app_main.obj + p.obj + q.obj

    ところが、boot.absで_rcopy()というライブラリ関数を使ってみると、この関数がmain.absで期待した場所に配置されない、というものでした。概念的に書けば以下のような感じです。(ここで、_rcopy()は_rcopy.objに含まれているものとします。さらに、_rcopy.objはユーザが明示的に指定してリンクしている訳ではありません。)

    boot.abs ← boot_main.obj + a.obj + b.obj + _rcopy.obj

    期待値:

    main.abs ← boot.abs + app_main.obj + p.obj + q.obj = (boot_main.obj + a.obj + b.obj + _rcopy.obj) + (app_main.obj + p.obj + q.obj)

    ブート部にboot_main.obj + a.obj + b.obj + _rcopy.objが入っていることを期待

    今回の件:

    main.abs ← boot.abs + app_main.obj + p.obj + q.obj = (boot_main.obj + a.obj + b.obj) + (app_main.obj + p.obj + q.obj + _rcopy.obj)

    ブート部にはboot_main.obj + a.obj + b.objのみで_rcopy.objが入っていない
    フラッシュ部の方にapp_main.obj + p.obj + q.obj + _rcopy.objのように_rcopy.objが入ってしまっている

    調べてみると(正直に書くと先に試行錯誤してみた後)、_rcopy()は特別扱いのライブラリ関数であり、配置アドレスを絶対番地で指定することが出来るようにCS+ for CA,CXのビルドツールのプロパティに設定項目があることが分かりました。(コマンドラインツールで言うと、rp78k0r.exeというコマンドのオプションで指定することが出来るようになっています。) ということでした。

    なお、「ブート-フラッシュの再リンク機能」については今回の資料では以下のようになっていました。





    ちなみに、メイン側プロジェクトでリンクするブート側プログラムですが、以下の入力欄で設定します。



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