スマートコンフィギュレータを使ったポート設定について

おはようございます

アキと申します。

今回初めてスマートコンフィギュレータを使用してコード生成を行いました。

コード生成後、メインプログラム内で簡単なポート出力の命令を記述し、

ビルドを行ったところスマートコンフィギュレータで設定したはずのポートが未定義というエラーが出てしまいました。

スマートコンフィギュレータで生成したものは、ジェネリックの「r_bsp」のファイル、ポート設定の「Config_PORT」の二つのみです。

生成された「Config_PORT.c」を確認したところ、「R_Config_PORT_Create」関数内で使用したいPORT1の設定はされているようでした。

私自身どこが問題なのかもイマイチ理解できていない状況です。

使用ボードはRenesas Solution Starter Kit for RX23E-Aを使用してます。

開発環境はCS+ for CC, Renesas Smart Configurator Ver:2.21.0を使用しています。

ご教示の程、よろしくお願いします。

Parents
  • コンポーネントの種類によってコンポーネント画面の設定後に「端子設定」タブから使用するリソースを実ピンに割り当てる必要がありますが、それは全てやっていますか?特定のペリフェラルは複数ピンのどれかを設定する必要があります。GPIO(ポートコンポーネント)の設定以外はほぼ端子設定が必須ですよ。

Reply
  • コンポーネントの種類によってコンポーネント画面の設定後に「端子設定」タブから使用するリソースを実ピンに割り当てる必要がありますが、それは全てやっていますか?特定のペリフェラルは複数ピンのどれかを設定する必要があります。GPIO(ポートコンポーネント)の設定以外はほぼ端子設定が必須ですよ。

Children
  • ご指摘ありがとうございます。

    「端子設定」タブを確認したところ、この画面では使用したいピン全てにアウトプットが割り当てられています。

    (今回使用したいのは全て出力ポートです。)

    ご指摘をいただいた箇所は上図のことで私の認識はあっていますでしょうか?

    この状態で再度コード生成を行い、CS+でビルドをしてみたのですが以前変わらずポート1が未定義ですというエラーが出続けてしまいます。

  • そのタブの左に「端子機能」というタブがありますよね?それを一つ一つ確認してください。未設定や割り当てに衝突があれば赤で警告されます。警告がなくてエラーが起こってなければ私が思っているのとは別の問題ですね。

  • おはようございます。

    「端子機能」タブを確認してみました。

    使用したいPORT1は全て割り当てがされている状態になっているかとおもいます。

    そのほかに警告やエラー表示も見当たらないため、わたしが他の部分で見落としてしまっている可能性が高いと思います。

    私自身のスキルでは問題の解決が難しそうということもあり、他の方法を試してみようかと思います。

    ご丁寧にご対応くださり、ありがとうございました。

  • 私はCS+はその前身のソフトウェアでe2studioがリリースされる以前にRXマイコン向けで触ったことがあります。最新版では触ったことがないですが、おそらく「e2studio + Smart Configurator」と同じく「CS+ + Smart Configurator」という構成ですので、コンパイラの設定でビルド対象のCファイル、インクルードディレクトリ、ライブラリパスの指定がされてない場合が考えられます。コードが生成されてもインクルードディレクトリが設定されていなければマクロが未定義になってしまうということです。コンパイルエラーと書いてあってもその内容が未掲載ですので推測でしかないですが、原因はそれくらいかなと思います。

  • おはようございます。

    問題解決いたしました。

    原因はmainファイルで"r_cg_macrodriver.h"を読み込んでいなかったことが原因だったようです。

    お恥ずかしい話、こちらを読み込まなければ、スマートコンフィギュレータで作成された定義ファイルが読み込まれないことを初めて知りました。

    たくさんのご助力をいただき、本当にありがとうございました。

    大変勉強になりました。

  • C/C++ => #include

    Python/Java/Go => import

    重要ですね。

  • スマート・コンフィグレータを使用する場合は、

    #include "r_smc_entry.h"

    を含めるのがセオリーかと思います。(上記ファイルにスマート・コンフィグレータで設定したAPI関数のインクルードファイルが追加されていきます。)

    スマート・コンフィグレータを使用しない場合で、I/Oポートとかレジスタアクセスする場合は、

    #include "iodefine.h"

    で、良いかと思います。

    スマート・コンフィグレータを使用した場合では、"iodefine.h"をインクルードするとエラーになる事もあります。)

    (具体的なエラーメッセージが提示されれば、直ぐにインクルードの問題だと気付けたかも知れません。)

  • おはようございます。

    ポート設定後、その設定ファイルを読み込んでいないという、

    本当に初歩的な部分を見落としていました。

    なるほど、設定方法の違いで読み込むファイルが違ってくる場合があるのですね。

    勉強になりました。

    ありがとうございます。