Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

ブートプログラムのサブプロジェクト作成

いつもお世話になっております。 Mきちです。

RL78/G14 CS+ for CA,CX を使っています。

先日ご教授いただいた資料をもとに、ブートプログラムによる書換の作成を始めました。

1)コード生成を使用して開発済みのプロジェクトに、ブート用のサブプロジェクトを追加

2)ブート側で実装したいシリアル通信やWDT機能のファイルをサブプロジェクトにも追加

3)r_cg_serial_user.c や r_cg_wdt_user.c などのファイルが両プロジェクトでダブったまま、とりあえずビルド実行

4)ブート側のビルドはOKですが、メインプロジェクトのビルドが始まると、当然シンボルがダブっているためエラー発生

この場合のお奨めの回避策を教えてください。

1)ファイルをコピーして、ファイル名と関数名をリネームする?

2)コンパイルスイッチで関数名を切り換える?

3)再リンク機能を使用して、ブート側で使用する機能もメイン側の関数を使用する?

メインプロジェクト側のコード生成を再度使用するならば、1)が良いのか?と考えていますが

工数がかかりそうなので、皆様のお奨めの回避策を教えてください。

  • Mきちです。
    遅くなりましたが、無事にダウンロード機能を盛り込んだプログラムが完成しました。
    以下、備忘録を兼ねて作業手順を記載しておきます。

    1)コード生成を使用したプロジェクトにブート用のサブプロジェクトを追加。
    2)コード生成のコードをサブプロジェクト側に移動。
    3)コード生成の割込処理に追加した部分からフラッシュ側でのみ使用する部分を関数として独立させてフラッシュ側に追加。(通信処理やタイマ処理など)
    4)独立させた関数群の分岐用インクルードファイルを作成。(ext_func)
    5)ブート側の割込処理とフラッシュ側の関数ファイルにインクルードファイルを追加。
    6)ブート側/フラッシュ側の動作を示すフラグを追加。
    7)割込処理内でフラッシュ側動作時はフラッシュ側の関数をコールするように追加。
    8)ブート側サイズが0x2000を超えないようにフラッシュ側でしか使用しない関数を移動。
    9)同じくフラッシュ側でしか使用しない外部変数を移動。
    10)ブート側にダウンロード用受信処理とFSL書込み処理を追加。
    以上です。

    つまづいたポイントは
    1)ROM化用オブジェクトを出力する=いいえ
    2)フラッシュ側に追加したファイルの分岐用インクルードの宣言忘れ でした。
    後者はフラッシュ側にext_funcの宣言がなくても実体があるのでビルドエラーにならないのですね。

    ご指導いただいた皆様に感謝します。ありがとうございました。
  • In reply to Mきち:

    ダウンロード機能をテストしています。更新するのはFLASH領域だけ。
    ほぼ順調と思っていたのですが、新たな問題が発生しました。
    1)FLASH側で動作中にプログラム更新コマンドを受信。
    2)FRAMのBOOT切換SWをONにしてWDTでリセット。
    3)起動後、BOOT側でBOOT切換SWがONなのでダウンロード待ち。
    4)ダウンロード+FSL書込み完了後、BOOT切換SWをOFFにしてWDTでリセット。
    5)起動後、BOOT側でBOOT切換SWがOFFなので return でFLASHへ遷移。
    通常はOKなのですが、ごく稀に 4)でリセットした後に「プログラムが動作していない?」ような状態が発生します。
    BOOT側はLEDをスロー点滅、FLASH側はLEDを高速点滅させていますが、LEDが点滅していないため、プログラムが動作していないと判断しています。ここから電源をOFF→ONするとFLASH動作を開始しますので、FSL書込みまでは完了していると思います。
    残念ながら、E1を接続中に現象を捕えられたことは無し。
    ダウンロードへの移行時のWDTリセットでNGになったことは無し。
    WDTのリセットは 0xFFを書き込んでいます。

    他に、なにか確認するポイントはありませんか?
  • In reply to Mきち:

    Mきちさん
    オプションバイトのクロック設定ですけれども
    WDTリセットする前とした後で周波数を変更してたりします?
  • In reply to Kirin:

    Mきちです。 お世話になります。
    クロック設定は、コード生成で、高速オンチップオシレータクロック設定 fHOCO=64 fIH=32 を選択しています。systeminit()で設定される以外にプログラムから変更することはありません。
    FSL関連の処理はRX63のサンプルから流用しているので、FSLの初期化パラメータを、クロック32Mhz/フルスピード/ステータス・チェック・インターナル・モードのままで使用しているので、そのせいでしょうか?
  • In reply to Mきち:

    Mきちさん
    RX63のサンプルから流用されているところはよく分かりませんけれども、、
    あと可能性があるのは未初期化のRAMのパリティエラーで内部リセットが発生しているとかですかねー。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page