『サンプルソフト投稿しました』RX63N RSPIを用いたSPI通信について

こんにちは。triangleです。

RX63NのRSPIを用いてSPI通信の初期設定から送信、

別チャンネルで送信データを受信するプログラムを作成しました。

サンプルプログラム等に投稿しましたので、参考になればと思います。

 

ソフト

http://japan.renesasrulz.com/cafe_rene/m/sample_program/367

説明書

http://japan.renesasrulz.com/cafe_rene/m/sample_program/368

Parents
  • 初歩的な事ですみません。
    mainのプログラムの中でhwsetup.hが定義されていないのですが、関連付けはどこでおこなわれているのでしょうか?
    プログラムを作るときはヘッダーファイルの内容まで把握しているのですよね?
Reply
  • 初歩的な事ですみません。
    mainのプログラムの中でhwsetup.hが定義されていないのですが、関連付けはどこでおこなわれているのでしょうか?
    プログラムを作るときはヘッダーファイルの内容まで把握しているのですよね?
Children
  • やな さん、こんにちは。NoMaYです。

    hwsetup.hというファイルは元々から無いですね。以下のファイルはルネサスさんの統合開発環境でプロジェクトを作成した時に生成されるソース(.c/.h)ファイルですが、その時点で存在してないです。(なぜhwsetup.hを用意しなかったかはルネサスさんでないと分からないです。) それで、推測ですが、今回質問されたのは、ワーニングレベルを上げたら警告が出た、とかかなぁ、と思ったのですが、少し調べてみました。

    triangleさんのプロジェクトのソース(PDG2が生成したPDG2独自のソースは除かれている)

    dbsct.c
    hwsetup.c
    intprg.c
    iodefine.h
    lowlvl.src
    lowsrc.c
    lowsrc.h
    resetprg.c
    sbrk.c
    sbrk.h
    stacksct.h
    typedefine.h
    vect.h
    vecttbl.c
    RSPI_RX63N.c

    調べて分かったのは、私のプロジェクトはhwsetup.c内の唯一の関数HardwareSetup()を使っておらず、HardwareSetup()を呼び出す唯一のソースresetprg.cでは以下のようにコメントアウトされていて、警告が出ない筈である、ということでした。(これは統合開発環境でプロジェクトを作成した時からそうなっている。) 対して、triangleさんのプロジェクトではHardwareSetup()が使われていても、extern宣言側がコメントアウトされたままになっていました。本来は、HardwareSetup()を使う場合、こちらもコメントアウトを解除しないと望ましくないですね。

    私のプロジェクト: resetprg.cは以下のままで問題無い

    //#ifdef __cplusplus                // Use Hardware Setup
    //extern "C" {
    //#endif
    //extern void HardwareSetup(void);
    //#ifdef __cplusplus
    //}
    //#endif
    //  HardwareSetup();                // Use Hardware Setup
        nop();

    triangleさんのプロジェクト: resetprg.cのextern宣言側がコメントアウトされたまま

    //#ifdef __cplusplus                // Use Hardware Setup
    //extern "C" {
    //#endif
    //extern void HardwareSetup(void);
    //#ifdef __cplusplus
    //}
    //#endif
        HardwareSetup();                // Use Hardware Setup
        nop();


    [追記]

    上で「なぜhwsetup.hを用意しなかったかはルネサスさんでないと分からないです」と書きましたが、なんとなくポリシーみたいなものなのかなぁ、とは感じています。

    ポリシーかな?と思うもの:

    呼び出す側と呼び出される側のソースが別々であっても、呼び出す側のソースが唯一で決まりきっている場合、.hファイルにextern宣言やprototype宣言を記述せずに(またはヘッダファイルを用意せずに)、.cファイル内にextern宣言やprototype宣言を記述する。

  • やな さん、こんにちは。NoMaYです。

    > mainのプログラムの中でhwsetup.hが定義されていないのですが、関連付けはどこでおこなわれているのでしょうか?

    本件、私の先日のリプライで疑問は解消されたでしょうか?

  • NoMaYさん回答有難う御座いました。
    また、返事が遅くなり申し訳ありません。
    SPI通信について理解ができていないため、関連したプログラムを見ていて思った疑問でしたので解決はしました。
    SPI通信の基本が判っていませんので別で質問を立ち上げたいと思います。