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

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

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

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

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

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

ご教授お願いします。
また、上記方法以外にも案がありましたらご提案お願いします。
Parents
  • 何度もすいません。

    教えていただいたunionの変数を、
    main以外の別ファイルのモジュールで使用するにはどのようにすればよいでしょうか?

    ヘッダーファイルに、

    union unVAL{
     struct PRG_A {
      //プログラムAが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
    };
     struct PRG_B {
      //プログラムBが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
    };
     struct PRG_C {
      //プログラムCが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
     };
    };

    extern union unVAL gUV;

    上記なように書いてみたのですが、エラーが出まくりです。

    下記のように宣言すると、
    今度はメモリが足りないような下記エラーが発生してしまいます。
    「CC78K0R error E0111: Compiler limit : too much global data defined in file」

    typedef struct _stPRG_A {
     //プログラムAが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_A;

    typedef struct _stPRG_B {
     //プログラムBが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_B;

    typedef struct _stPRG_C {
     //プログラムCが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_C;

    union unVAL{
     stPRG_A PRGA;
     stPRG_B PRGB;
     stPRG_C PRGC;
    } ;

    extern union unVAL gUV;

    どのようにすればよいのかご教授お願いします。
Reply
  • 何度もすいません。

    教えていただいたunionの変数を、
    main以外の別ファイルのモジュールで使用するにはどのようにすればよいでしょうか?

    ヘッダーファイルに、

    union unVAL{
     struct PRG_A {
      //プログラムAが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
    };
     struct PRG_B {
      //プログラムBが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
    };
     struct PRG_C {
      //プログラムCが使用する外部変数の宣言
      unsigned char TestBuf1[10000];
      unsigned char TestBuf2[10000];
     };
    };

    extern union unVAL gUV;

    上記なように書いてみたのですが、エラーが出まくりです。

    下記のように宣言すると、
    今度はメモリが足りないような下記エラーが発生してしまいます。
    「CC78K0R error E0111: Compiler limit : too much global data defined in file」

    typedef struct _stPRG_A {
     //プログラムAが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_A;

    typedef struct _stPRG_B {
     //プログラムBが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_B;

    typedef struct _stPRG_C {
     //プログラムCが使用する外部変数の宣言
     unsigned char TestBuf1[10000];
     unsigned char TestBuf2[10000];
    }stPRG_C;

    union unVAL{
     stPRG_A PRGA;
     stPRG_B PRGB;
     stPRG_C PRGC;
    } ;

    extern union unVAL gUV;

    どのようにすればよいのかご教授お願いします。
Children
No Data