コード生成ツールの使用/未使用でマイコンの動作が変わるのか

初めて当フォーラムを利用します。peterです。よろしくお願いします。

機能追加のためのコード改造作業をするにあたって、はじめてCS+を使用しました。

ピン配置の変更があったため、①コード生成ツールを使ってコードを作成 -> ②プロジェクトをビルド -> ③マイコンに書き込んで実行したところ、正常に動作しませんでした(マイコン -> 外部機器へのデータ送信ができない)。

試行錯誤の末、以下の手順でプロジェクトを作成することで正常な動作を確認できました。

  1. 改造前のプロジェクトを2つ用意する(以下、プロジェクトAとB)
  2. プロジェクトAでコード生成ツールを使用
  3. プロジェクトAのコードファイルをすべてコピーして、プロジェクトBに移植
  4. プロジェクトBをビルド
  5. プロジェクトBのmotファイルをマイコンに書き込んで実行

プロジェクトAとプロジェクトBの違いは、コード生成ツールの使用/未使用だけです。

同じコードを同じバージョンのビルドツールでビルドしたのに、マイコンに書き込んだ後の挙動が異なることに混乱しています。

どうしてこのような現象が起こるのか、ご教授お願いいたします。

※バージョン情報

パッケージバージョン V4.08.00 [08Nov 2022 ]

バージョン V5.08.00.01 [18 Oct 2022 ]

ビルド・ツール CA78K0R V1.72

  • チョコです。

    RL78のコード生成のトラップは、ウォッチドッグ・タイマがディフォルトでオンになっていることです。ウォッチドッグ・タイマの設定はプログラムではなく、オプション・バイトに設定されます。このために、お問い合わせのような現象が発生しているのではないかと思われます。また、ディフォルトでリセット要因の読み出しがオンになっているために、プログラムで読もうとすると必ず0x00になってしまいます。

    全ての(未使用の)設定項目がどうなっているか確認することをお勧めします。

    以上

  • わわいです

    > コード生成ツールの使用/未使用でマイコンの動作が変わるのか

    変わりません。

    たんにコードが間違ってるから動かない、だけです。

    コード生成ツールと行っても、出来合いのコードを条件に合わせて出してるだけの話なので、どんな場合でも正しく動くってもんではありません。間違った使い方したら動かないのは当たり前の話です

  • すでにチョコさんやわわいさんに書かれている内容が全てなんです。

    でも、追記させていただきますね。

    おそらくmain()関数と他のmain関数から呼び出す関数などのプログラムコードは同じなのにおかしい!ってのがこの質問の趣旨だと思います。忘れてはならないのはマイコンは電源通電後にリセットが入って最初にリセットハンドラから起動するのでmain関数の前にいろんな処理が先行実行されます。パソコンでプログラム書いてても実はmain関数を呼び出すcランタイムルーチンてのが各環境で用意されているのですが、そんなこと知らずに開発している人は少なくないと思います。RL78でもそう言うmain関数を呼び出すまでのコードはツールが用意してくれるんです。確認した訳じゃないですけど、プロジェクトAとBでそのリセットハンドラからmain関数が呼び出されるまでの間に違うプログラムが用意されていてそれにより動作に違いが出ているんでと思いますよ。

    開発環境で関数の呼び出し関係が表示できると思います。main関数を呼び出してる元の部分を検索してみては?

  • チョコさん わわいさん Shoji Yamamotoさん

    ご教授ありがとうございます。

    ウォッチドッグタイマの設定が

    ウォッチドッグタイマ動作設定を「使用する」 -> 「使用しない」に変更してコード生成したところ、ビルドで下記エラーが発生しました。

    エラー箇所はmain()内のR_WDT_Restart()の場所です。

    F0006 CC78K0R error F0006: File not found 'DefaultBuild\xxxxx.vfi'(プロジェクト名は伏せさせていただきます)

    E7001 VF78K0R error E7001: The link error was found.

    (ちなみに、R_WDT_Restert()をコメントアウトしたところ、マイコン書き込みまでできましたが、動作は正常ではありませんでした。)

    すでに投稿されていたQ&Aを参考にプロパティをいじってみましたが、あまり理解できませんでした。

    https://ja-support.renesas.com/knowledgeBase/17797515

    https://ja-support.renesas.com/knowledgeBase/17796493

    そもそもプロジェクトツリーにvfiファイルがないのでどうすれば...と、行き詰っています。

    エラーを解決するにはどうすればよいでしょうか。

  • チョコです。

    もうCA78K0Rは使っていませんし、マニュアルも参照できません。CA78K0Rで作成したプロジェクトで残っているのは、9年程度前に作成していたものくらいです。今回は、そのプロジェクトを使って説明します。

    「*.vfi」ファイルは見たことありません。なお、このエラーはコード生成とは無関係だと思われます。

    >そもそもプロジェクトツリーにvfiファイルがないのでどうすれば...と、行き詰っています。

    これについては、下側のQ&Aに対策が書かれているようですね。「vfiファイルがない」のであれば、

    「CA78K0R(ビルドツール)」のプロパティの「コンパイル・オプション」タブの中に以下に示すような「変数/関数情報ファイル」の項目があるはずです。ここに何か書かれていないでしょうか?ここに何か書かれていたら、それを削除することが考えられます。

    あとは、元のプログラムで、どのような機能をどのように使っているかは明確になっていると思いますが、それに合わせて、コード生成の全ての項目を埋めてくださいとしか言いようがありません。

    これ以上は、情報が乏しすぎてコメントはできません。

    以上

  • 遅い返信ですみません。鈴木と申します。

    コード生成はソースファイル以外にリンクオプションに影響を与えます。

    そのためソースファイルだけ持ってきても同じように動作しないこともあります。

    下記FAQを参照して、リンクオプションも同じになるようにしてみてください。

    コード生成プラグインでオプション・バイトを設定する方法 | Renesas Customer Hub

    以上、よろしくお願い申し上げます。

  • チョコさん 鈴木さん

    回答ありがとうございます。

    結論から申し上げますと、オプションバイトの設定で正常に動作するようにできました。

    改造前と改造後のmotファイルをみたところ、オプション設定画面の表記は同じにもかかわらず、motファイル内のオプションバイト設定の記述が違うことに気づきました。

    オプションバイトを設定しなおしてコード生成したら、正常に動作しました。

    検証したところ、

     オプション変更 → ビルド 

    ではmotファイル内のオプションバイトの設定の記述は書き換えられないようで、

     オプション変更 → コード生成実行 → ビルド

    とすることで、オプションバイトの設定が更新されるようです。

    今後は、コードだけじゃなくてオプションバイトの設定も確認するようにします。

    皆様ご協力ありがとうございました。