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といいます。
unionを使うと多分こんな感じになると思います。
注意点としては割込処理ルーチンも別な処理になるなら変数アクセスも別になるようにしなくてはいけませんね。
エビスクラウンさんのいわれる通りstatic記憶クラスは注意した方がよろしいかと。
ただし各PGMが(パワーオン)リセットしないと切り替わらないならば競合しないので問題無いと思います。
typedef struct _ST_VAR_PGMA_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMA ;
typedef struct _ST_VAR_PGMB_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMB ;
typedef struct _ST_VAR_PGMC_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMC ;
typedef union _UN_PGM_VAR_ {
ST_VAR_PGMA stVarA ; // PGM-Aの変数
ST_VAR_PGMB stVarB ; // PGM-Bの変数
ST_VAR_PGMC stVarC ; // PGM-Cの変数
} UN_PGM_VAR ;
UN_PGM_VAR unPgmVar ; // PGM-A\,B\,C共有変数
char cPgmNum ; // プログラム識別
void pgm_A( void )
{
unPgmVar.stVarA.nData1 = 何とか ;
}
void main( void )
{
// どこかのI/OチェックしてPGM識別 ->cPgmNum
switch (cPgmNum) {
case 1 :
必要なら変数初期値セット
pgm_A( ) ; // PGM-Aを処理
break ;
case 2 :
pgm_B( ) ; // PGM-Bを処理
break ;
case 3 :
pgm_C( ) ; // PGM-Cを処理
break ;
default :
break ;
}
}
Cancel
Up
0
Down
Reply
Cancel
Reply
LunaJam
over 11 years ago
LunaJamといいます。
unionを使うと多分こんな感じになると思います。
注意点としては割込処理ルーチンも別な処理になるなら変数アクセスも別になるようにしなくてはいけませんね。
エビスクラウンさんのいわれる通りstatic記憶クラスは注意した方がよろしいかと。
ただし各PGMが(パワーオン)リセットしないと切り替わらないならば競合しないので問題無いと思います。
typedef struct _ST_VAR_PGMA_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMA ;
typedef struct _ST_VAR_PGMB_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMB ;
typedef struct _ST_VAR_PGMC_ {
int nData1 ; //
必要なだけ変数を定義
} ST_VAR_PGMC ;
typedef union _UN_PGM_VAR_ {
ST_VAR_PGMA stVarA ; // PGM-Aの変数
ST_VAR_PGMB stVarB ; // PGM-Bの変数
ST_VAR_PGMC stVarC ; // PGM-Cの変数
} UN_PGM_VAR ;
UN_PGM_VAR unPgmVar ; // PGM-A\,B\,C共有変数
char cPgmNum ; // プログラム識別
void pgm_A( void )
{
unPgmVar.stVarA.nData1 = 何とか ;
}
void main( void )
{
// どこかのI/OチェックしてPGM識別 ->cPgmNum
switch (cPgmNum) {
case 1 :
必要なら変数初期値セット
pgm_A( ) ; // PGM-Aを処理
break ;
case 2 :
pgm_B( ) ; // PGM-Bを処理
break ;
case 3 :
pgm_C( ) ; // PGM-Cを処理
break ;
default :
break ;
}
}
Cancel
Up
0
Down
Reply
Cancel
Children
No Data