お世話になっております。長文で失礼します。
対象: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()などが再度実行されるという理解でよろしいのでしょうか。(セレクタプログラムで設定したものが更新される?)
セクションの割り付け等理解できていないところが多く、質問自体意味不明かもしれませんが
このあたり詳しい方がおられましたら、教えていただきたく思います。よろしくお願いいたします。