RL78/G13で、デュアルブート

RL78/G13と、CubeSuite+を使用して開発しています。

CPUのGPIOにスイッチを設けて、
スイッチ=OFFの場合はプログラムA、
スイッチ=ONの場合にはプログラムB
を、起動するようなやり方は可能なのでしょうか?

プログラムA、プログラムB双方ともRAMを大量に消費する
プログラムで、機能や動作内容が異なるため、
main処理後にプログラムA、プログラムBを選んで
動作をする余裕がありません。

コードサイズ自体はそれぞれ大きくないのでROMには
入りそうなのですが、RAMがどうにもなりません。

発想としては、リセット解除後に、
スイッチを読み込むプログラムが動作して、
その後、スイッチに従ったプログラムA又はBが動作する
ようなことがしたいのですが、
どのようにCubeSuiteで作成すればよいのかわかりません。

ご教授お願いします。
また、上記方法以外にも案がありましたらご提案お願いします。
Parents
  • こんにちは、H8/3052とHEWでそのようなプログラムを作っています。
     私の場合は4ビットスイッチで、16通りに分岐できます。

     プログラムAとBをコンパイルするとき、セクションのアドレスを指定して0x10000と0x20000に作ります。
     次にそれらのセレクターとして、次のようなプログラムを作ります。

    #define PRG_A ((void (*)(void)) 0x10000 ) /* プログラムA */
    #define PRG_B ((void (*)(void)) 0x20000 ) /* プログラムB */

    void main
    {
    if ( switch )
    PRG_A() ;
    else PRG_B() ;
    }


     これでMOTファイルが三つできます。MOTファイルはSファイルと言う構造です。
     ルネサスのマニュアルを探せば、Sファイルの構造が書いて有ります。
     内容は次のように3っつの部分で出来ています。

    1.ヘッダー
    2.本体
    3.フッター

     テキストで出来ていますから3っつを結合編集して次のようにして、1本のMOTファイルを作ります。

    セレクターのヘッダー
    セレクターの本体
    プログラムAの本体
    プログラムBの本体
    セレクターのフッター

     これで完成です。もしもROMを部分的に消したり書き込めれば、3本のソフトを別々に書き込めば良い。
     私の自作書き込みソフトは、そのようになっています。
Reply
  • こんにちは、H8/3052とHEWでそのようなプログラムを作っています。
     私の場合は4ビットスイッチで、16通りに分岐できます。

     プログラムAとBをコンパイルするとき、セクションのアドレスを指定して0x10000と0x20000に作ります。
     次にそれらのセレクターとして、次のようなプログラムを作ります。

    #define PRG_A ((void (*)(void)) 0x10000 ) /* プログラムA */
    #define PRG_B ((void (*)(void)) 0x20000 ) /* プログラムB */

    void main
    {
    if ( switch )
    PRG_A() ;
    else PRG_B() ;
    }


     これでMOTファイルが三つできます。MOTファイルはSファイルと言う構造です。
     ルネサスのマニュアルを探せば、Sファイルの構造が書いて有ります。
     内容は次のように3っつの部分で出来ています。

    1.ヘッダー
    2.本体
    3.フッター

     テキストで出来ていますから3っつを結合編集して次のようにして、1本のMOTファイルを作ります。

    セレクターのヘッダー
    セレクターの本体
    プログラムAの本体
    プログラムBの本体
    セレクターのフッター

     これで完成です。もしもROMを部分的に消したり書き込めれば、3本のソフトを別々に書き込めば良い。
     私の自作書き込みソフトは、そのようになっています。
Children
No Data