Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
RL78 MCU
More
Cancel
RL78 MCU
Forum
RL78/G13で、デュアルブート
Home
Forum
Tags
More
Cancel
New
Replies
12 replies
Subscribers
446 subscribers
Views
8052 views
Users
0 members are here
G13
デュアルブートRL78
スイッチ
プログラム
CubeSuite+
beginner
Options
Share
More
Cancel
Related
RL78/G13で、デュアルブート
RyuKucchan
over 11 years ago
RL78/G13と、CubeSuite+を使用して開発しています。
CPUのGPIOにスイッチを設けて、
スイッチ=OFFの場合はプログラムA、
スイッチ=ONの場合にはプログラムB
を、起動するようなやり方は可能なのでしょうか?
プログラムA、プログラムB双方ともRAMを大量に消費する
プログラムで、機能や動作内容が異なるため、
main処理後にプログラムA、プログラムBを選んで
動作をする余裕がありません。
コードサイズ自体はそれぞれ大きくないのでROMには
入りそうなのですが、RAMがどうにもなりません。
発想としては、リセット解除後に、
スイッチを読み込むプログラムが動作して、
その後、スイッチに従ったプログラムA又はBが動作する
ようなことがしたいのですが、
どのようにCubeSuiteで作成すればよいのかわかりません。
ご教授お願いします。
また、上記方法以外にも案がありましたらご提案お願いします。
Parents
LunaJam
over 11 years ago
LunaJamといいます。
とてつもない配列サイズですがRAMの容量は足りてますでしょうか。
モジュールを分割してグローバル変数を共有して使う場合はだいたいこんな感じだと思います。
ヘッダを共用する場合は変数定義が各モジュールでダブらないよう工夫すればOKです。
変数定義ヘッダファイル:Header.H
//---------------------------------------------------
#ifndef _DEF_APP_HDR_ // 多重定義対策
#define _DEF_APP_HDR_
// 各プログラム用の構造体型定義
// 共用体型定義
typedef union _UN_PGM_VAR_ {
PRG_A stPRGA;
PRG_B stPRGB;
PRG_C stPRGC;
} UN_PGM_VAR ;
// 変数定義
#ifdef _APP_DEF_
UN_PGM_VAR gunPgmVar ; // main.c 用
char cPgmNum ; // プログラム識別
#else
// _APP_DEF_
extern UN_PGM_VAR gunPgmVar ; // main.c 以外用
extern char cPgmNum ; // プログラム識別
#endif // _APP_DEF_
// 関数プロトタイプ
void pgm_A( void ) ;
#endif // _DEF_APP_HDR_
//---------------------------------------------------
メインモジュール:main.c
//---------------------------------------------------
#define _APP_DEF_ // 内部識別
#include \”Header.h\” // アプリケーションヘッダ
void main( void )
{
// どこかのI/OチェックしてPGM識別 ->cPgmNum
switch (cPgmNum) {
case 1 :
//必要なら変数初期値セット
gunPgmVar.stPRGA.TestBuf1[0] = 1 ;
pgm_A( ) ; // PGM-Aを処理
break ;
case 2 :
pgm_B( ) ; // PGM-Bを処理
break ;
case 3 :
pgm_C( ) ; // PGM-Cを処理
break ;
default :
break ;
}
}
//---------------------------------------------------
サブモジュール:sub.c
//---------------------------------------------------
#include \”Header.h\” // アプリケーションヘッダ
void pgm_A( void )
{
PRG_A *pstPRGA;
// PGM-Aのメイン処理
gunPgmVar.stPRGA.TestBuf1[1] = gunPgmVar.stPRGA.TestBuf1[0] ;
// 長ったらしいのでポインタ処理する場合有り
pstPRGA = &(gunPgmVar.stPRGA) ;
pstPRGA->TestBuf1[1] = pstPRGA->TestBuf1[0] ;
}
//---------------------------------------------------
Cancel
Up
0
Down
Reply
Cancel
Reply
LunaJam
over 11 years ago
LunaJamといいます。
とてつもない配列サイズですがRAMの容量は足りてますでしょうか。
モジュールを分割してグローバル変数を共有して使う場合はだいたいこんな感じだと思います。
ヘッダを共用する場合は変数定義が各モジュールでダブらないよう工夫すればOKです。
変数定義ヘッダファイル:Header.H
//---------------------------------------------------
#ifndef _DEF_APP_HDR_ // 多重定義対策
#define _DEF_APP_HDR_
// 各プログラム用の構造体型定義
// 共用体型定義
typedef union _UN_PGM_VAR_ {
PRG_A stPRGA;
PRG_B stPRGB;
PRG_C stPRGC;
} UN_PGM_VAR ;
// 変数定義
#ifdef _APP_DEF_
UN_PGM_VAR gunPgmVar ; // main.c 用
char cPgmNum ; // プログラム識別
#else
// _APP_DEF_
extern UN_PGM_VAR gunPgmVar ; // main.c 以外用
extern char cPgmNum ; // プログラム識別
#endif // _APP_DEF_
// 関数プロトタイプ
void pgm_A( void ) ;
#endif // _DEF_APP_HDR_
//---------------------------------------------------
メインモジュール:main.c
//---------------------------------------------------
#define _APP_DEF_ // 内部識別
#include \”Header.h\” // アプリケーションヘッダ
void main( void )
{
// どこかのI/OチェックしてPGM識別 ->cPgmNum
switch (cPgmNum) {
case 1 :
//必要なら変数初期値セット
gunPgmVar.stPRGA.TestBuf1[0] = 1 ;
pgm_A( ) ; // PGM-Aを処理
break ;
case 2 :
pgm_B( ) ; // PGM-Bを処理
break ;
case 3 :
pgm_C( ) ; // PGM-Cを処理
break ;
default :
break ;
}
}
//---------------------------------------------------
サブモジュール:sub.c
//---------------------------------------------------
#include \”Header.h\” // アプリケーションヘッダ
void pgm_A( void )
{
PRG_A *pstPRGA;
// PGM-Aのメイン処理
gunPgmVar.stPRGA.TestBuf1[1] = gunPgmVar.stPRGA.TestBuf1[0] ;
// 長ったらしいのでポインタ処理する場合有り
pstPRGA = &(gunPgmVar.stPRGA) ;
pstPRGA->TestBuf1[1] = pstPRGA->TestBuf1[0] ;
}
//---------------------------------------------------
Cancel
Up
0
Down
Reply
Cancel
Children
No Data