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
8051 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
エビスクラウン
over 11 years ago
RyuKucchanさん、リカルドさん
まず、リカルドさんの方法でも可能ですが、H8ならば最適化リンカにおけるセクションの複数割り付け機能を使った方が簡単だと思います。
ROM容量に問題がなく、RAMだけが足りない、しかも2つのプログラムが同時に動くことがないのであれば、プログラムAとプログラムBが使用するRAM領域を同じ番地に配置すれば良いだけです。その機能がH8にはありますから、その機能を使えばプログラムは1本化、ロードモジュールも1つで済みますから、多分ご指摘の方法より簡単だと思います。もっとも、プログラムAとプログラムBで変数の割り付くセクションを分ける必要はありますが。。。
一方、RyuKucchanさんのRL78の場合、リンクディレクティブにH8と同等の機能があるかと調べてみましたが、私の調べた範囲ではありませんでした(見つかりませんでした)。
そうなると考えられる方法はプログラムAとプログラムBが使用する外部変数を共用体にするが1つの作戦です。
例:
union {
struct program_A {
プログラムAが使用する外部変数の宣言
} A;
struct program_B {
プログラムBが使用する外部変数の宣言
} B;
} VAL;
これでプログラムAとプログラムBの外部変数の領域を同一のRAMに割り付けられますが、変数名が長くなり、リストの可読性も悪くなるのが難点です。
もう1つの作戦は外部変数を全てマクロ名で定義する方法です。例えば、int a;ならば、この宣言の代わりに
#define a (*(int *)0x....)
と全て番地を指定して定義する方法です。これでプログラム上は一切変数が存在しないことになりますから、プログラムAとプログラムBで同一番地に変数を配置するだけ、しかも変数宣言以外は何も変える必要なし、となります。
なお、どちらにしても外部変数に対する初期値の設定は出来ません。初期値は全てプログラムの命令として設定する必要があります。如何でしょうか?
Cancel
Up
0
Down
Reply
Cancel
Reply
エビスクラウン
over 11 years ago
RyuKucchanさん、リカルドさん
まず、リカルドさんの方法でも可能ですが、H8ならば最適化リンカにおけるセクションの複数割り付け機能を使った方が簡単だと思います。
ROM容量に問題がなく、RAMだけが足りない、しかも2つのプログラムが同時に動くことがないのであれば、プログラムAとプログラムBが使用するRAM領域を同じ番地に配置すれば良いだけです。その機能がH8にはありますから、その機能を使えばプログラムは1本化、ロードモジュールも1つで済みますから、多分ご指摘の方法より簡単だと思います。もっとも、プログラムAとプログラムBで変数の割り付くセクションを分ける必要はありますが。。。
一方、RyuKucchanさんのRL78の場合、リンクディレクティブにH8と同等の機能があるかと調べてみましたが、私の調べた範囲ではありませんでした(見つかりませんでした)。
そうなると考えられる方法はプログラムAとプログラムBが使用する外部変数を共用体にするが1つの作戦です。
例:
union {
struct program_A {
プログラムAが使用する外部変数の宣言
} A;
struct program_B {
プログラムBが使用する外部変数の宣言
} B;
} VAL;
これでプログラムAとプログラムBの外部変数の領域を同一のRAMに割り付けられますが、変数名が長くなり、リストの可読性も悪くなるのが難点です。
もう1つの作戦は外部変数を全てマクロ名で定義する方法です。例えば、int a;ならば、この宣言の代わりに
#define a (*(int *)0x....)
と全て番地を指定して定義する方法です。これでプログラム上は一切変数が存在しないことになりますから、プログラムAとプログラムBで同一番地に変数を配置するだけ、しかも変数宣言以外は何も変える必要なし、となります。
なお、どちらにしても外部変数に対する初期値の設定は出来ません。初期値は全てプログラムの命令として設定する必要があります。如何でしょうか?
Cancel
Up
0
Down
Reply
Cancel
Children
No Data