ブートプログラムのサブプロジェクト作成

いつもお世話になっております。 Mきちです。

RL78/G14 CS+ for CA,CX を使っています。

先日ご教授いただいた資料をもとに、ブートプログラムによる書換の作成を始めました。

1)コード生成を使用して開発済みのプロジェクトに、ブート用のサブプロジェクトを追加

2)ブート側で実装したいシリアル通信やWDT機能のファイルをサブプロジェクトにも追加

3)r_cg_serial_user.c や r_cg_wdt_user.c などのファイルが両プロジェクトでダブったまま、とりあえずビルド実行

4)ブート側のビルドはOKですが、メインプロジェクトのビルドが始まると、当然シンボルがダブっているためエラー発生

この場合のお奨めの回避策を教えてください。

1)ファイルをコピーして、ファイル名と関数名をリネームする?

2)コンパイルスイッチで関数名を切り換える?

3)再リンク機能を使用して、ブート側で使用する機能もメイン側の関数を使用する?

メインプロジェクト側のコード生成を再度使用するならば、1)が良いのか?と考えていますが

工数がかかりそうなので、皆様のお奨めの回避策を教えてください。

Parents
  • Mきちさん、こんにちは。NoMaYです。

    先ほどの案を試してみました。そして、今ひとつだったかも、という点に気付きました。それは、以下のようなことです。

    ・ 例えばUARTとかで、メイン側では2ch使用するけれども、ブート側では1chしか使わないとしても、2chまとめて1つのソース内にコード生成されるので、ブート側に2ch分のコードを置くことになってしまう。(コード生成されたコードなので将来的に変更することは無いと思うけれども。)

    以下、プロジェクトのファイル一式です。(なお、今朝のファイルもそうですが、ブート側の処理を終えてメイン側へ移るところとか、ブート側の割り込みエントリからメイン側の割り込み処理を呼ぶところとか、ぜんぜん入っていません。)

    プロジェクトのファイル一式:
    issue_20190214.zip

    また、今回のプロジェクトでは、hdwinit()やR_Systeminit()などは以下のようなソースにしてみました。

    boot_main.c

    void boot_main(void)
    {
        EI();

        _rcopy(1);
        _rcopy(2);
        _rcopy(3);

        // TODO: Run boot code

        // TODO: Jump to appmain
    }

    void boot_R_Systeminit(void)
    {
        PIOR0 = 0x00U;
        PIOR1 = 0x00U;
        R_CGC_Get_ResetSource();
        R_CGC_Create();
        R_SAU0_Create();
        R_WDT_Create();
        IAWCTL = 0x00U;
    }

    void hdwinit(void)
    {
        DI();
        boot_R_Systeminit();
    }

    app_main.c

    void main(void)
    {
        DI();
        app_R_Systeminit();
        EI();

        // TODO: Run application code
    }

    void app_R_Systeminit(void)
    {
        R_SAU1_Create();
    }

    以下、画面コピーです。



Reply
  • Mきちさん、こんにちは。NoMaYです。

    先ほどの案を試してみました。そして、今ひとつだったかも、という点に気付きました。それは、以下のようなことです。

    ・ 例えばUARTとかで、メイン側では2ch使用するけれども、ブート側では1chしか使わないとしても、2chまとめて1つのソース内にコード生成されるので、ブート側に2ch分のコードを置くことになってしまう。(コード生成されたコードなので将来的に変更することは無いと思うけれども。)

    以下、プロジェクトのファイル一式です。(なお、今朝のファイルもそうですが、ブート側の処理を終えてメイン側へ移るところとか、ブート側の割り込みエントリからメイン側の割り込み処理を呼ぶところとか、ぜんぜん入っていません。)

    プロジェクトのファイル一式:
    issue_20190214.zip

    また、今回のプロジェクトでは、hdwinit()やR_Systeminit()などは以下のようなソースにしてみました。

    boot_main.c

    void boot_main(void)
    {
        EI();

        _rcopy(1);
        _rcopy(2);
        _rcopy(3);

        // TODO: Run boot code

        // TODO: Jump to appmain
    }

    void boot_R_Systeminit(void)
    {
        PIOR0 = 0x00U;
        PIOR1 = 0x00U;
        R_CGC_Get_ResetSource();
        R_CGC_Create();
        R_SAU0_Create();
        R_WDT_Create();
        IAWCTL = 0x00U;
    }

    void hdwinit(void)
    {
        DI();
        boot_R_Systeminit();
    }

    app_main.c

    void main(void)
    {
        DI();
        app_R_Systeminit();
        EI();

        // TODO: Run application code
    }

    void app_R_Systeminit(void)
    {
        R_SAU1_Create();
    }

    以下、画面コピーです。



Children
No Data