RL78でのプログラム切り替えについて

お世話になっております。
長文で失礼します。

対象:RL78/G13 (R5F1006E)
環境:CS+ V4.01.00 / CC-RL V1.03.00
基本的な初期設定(クロック、ポート設定など)は
コード生成使用

●やりたいこと
基板への電源投入時にSW状態を判定して、
プログラムAの動作
プログラムBの動作
を切り替えて使えるようにしたい

過去の投稿を拝見して、実現可能であることは理解しました。
http://japan.renesasrulz.com/cafe_rene/f/forum18/1507/rl78-g13

また、RFPのユーザーマニュアルから、
”複数プログラムファイル選択”することで
motファイルを結合して書き込む機能が存在するということを確認しました。


●試したこと
添付の図の様になればいいと思ったので、
・セレクタプログラム
・プログラムA
・プログラムB
をそれぞれ別プロジェクトで作成。

セレクタプログラムは、前述の過去投稿のリカルド様の書き込みを
参考させていただいて作成し、SWのON/OFFでそれぞれ0x04000と0x06000に
飛ぶことを確認しました。

プログラムAはCC-RLのプロパティ→リンク・オプション→セクションの項目から
 セクションを自動的に配置する:いいえ
 セクションの開始アドレス:.constの横の欄に0x04000を指定
して、開始アドレスを0x04000にしたつもりです
(デバッグ時にメモリの変化をみて、それらしく変わるのを確認)
プログラムBも同様に0x06000にしました。

この状態において以下を試してみました


(1)RFPでmotファイルを結合してみる

全然理解できていないので、まずはやってみようということで
セレクタ.mot、プログラムA.mot、プログラムB.mot
を選択してみたところ、
”エラー(E3000101): アドレス(0x00000000)にはデータが既に存在します。”
のエラー。アドレス0はベクタテーブル領域で動かせないのでは?
と思ったので(2)へ

(2)手動でmotファイルを結合してみる


ファイルを比較し、被っていない部分を切りはりして

セレクタ前半(先頭から、S113FE00の直前まで)
プログラムA(S1134000...の行からの部分、S113FE00の直前まで)
プログラムB(S1136000...の行からの部分、S113FE00の直前まで)
セレクタ後半(S113FE00...からS903...の部分)

という形で一つのファイルに。書き込みは成功し、
起動してみると、SWのON/OFFで何やら挙動は違うが
思った通りの動きではないという状況です。

●質問内容
(1) 目的を実現するには添付の図のような理解であっているのでしょうか。

(2) 設定が足りない項目があると思うのですが、思い当たるものはありますでしょうか。

(3) 現状の理解が正しいとして
.textfにスタートアップが含まれる(RL78コンパイラコース テキストより)ということは、
セレクタプログラムからプログラムA or プログラムBに飛んだ時に
それぞれ該当するスタートアップルーチンが再度実行され
hwinit()などが再度実行されるという理解でよろしいのでしょうか。
(セレクタプログラムで設定したものが更新される?)

 

セクションの割り付け等理解できていないところが多く、質問自体意味不明かもしれませんが

このあたり詳しい方がおられましたら、教えていただきたく思います。
よろしくお願いいたします。

Parents
  • > (1) 目的を実現するには添付の図のような理解であっているのでしょうか。

    プログラムAとBが割り込みを使わないものであれば図の方法での実現も不可能ではないと思います。割り込みを使うのであれば RAM 上にフックを設けるなど工夫が必要になるでしょう。

    > (2) 設定が足りない項目があると思うのですが、思い当たるものはありますでしょうか。
    >
    > (3) 現状の理解が正しいとして
    > .textfにスタートアップが含まれる(RL78コンパイラコース テキストより)ということは、
    > セレクタプログラムからプログラムA or プログラムBに飛んだ時に
    > それぞれ該当するスタートアップルーチンが再度実行され
    > hwinit()などが再度実行されるという理解でよろしいのでしょうか。
    > (セレクタプログラムで設定したものが更新される?)

    この辺りの理解が乏しいのであれば、技術的困難が予想されるのでセレクタプログラムとプログラムAとBは単一のプロジェクトで作成されることをお勧めします。
Reply
  • > (1) 目的を実現するには添付の図のような理解であっているのでしょうか。

    プログラムAとBが割り込みを使わないものであれば図の方法での実現も不可能ではないと思います。割り込みを使うのであれば RAM 上にフックを設けるなど工夫が必要になるでしょう。

    > (2) 設定が足りない項目があると思うのですが、思い当たるものはありますでしょうか。
    >
    > (3) 現状の理解が正しいとして
    > .textfにスタートアップが含まれる(RL78コンパイラコース テキストより)ということは、
    > セレクタプログラムからプログラムA or プログラムBに飛んだ時に
    > それぞれ該当するスタートアップルーチンが再度実行され
    > hwinit()などが再度実行されるという理解でよろしいのでしょうか。
    > (セレクタプログラムで設定したものが更新される?)

    この辺りの理解が乏しいのであれば、技術的困難が予想されるのでセレクタプログラムとプログラムAとBは単一のプロジェクトで作成されることをお勧めします。
Children