R_UART0_Receive関数の仕様について

お世話になっております、ムヌルです。

RL78/G14とCS+を使用しています。

『R_UART0_Receive』関数について、気になった事がありました。

こちらの関数は初期の設定だと、

MD_STATUS R_UART0_Receive(uint8_t * const rx_buf, uint16_t rx_num)
{
MD_STATUS status = MD_OK; //正常終了ではなく、正常起動

if (rx_num < 1U)
{
status = MD_ARGERROR;
}
else
{
g_uart0_rx_count = 0U;
g_uart0_rx_length = rx_num;
gp_uart0_rx_address = rx_buf;
}

return (status);
}

という様になっていますが、ここでお聞きしたいことが3つあります。

①この関数の処理が行われるタイミングはいつか?

②この関数の戻り値(MD_OK等)は必ず使用しないとダメか?

 又、この戻り値を無視しても問題はないのか。

 (サンプルコードを見る限り、この戻り値を代入したり参照されたりしていない)

③この関数の戻り値を使用しない場合、void型に変更し、戻り値を使用しない

処理内容に変更してもよいか?(void型に変更し、returnを無くす程度)

Parents
  • チョコです。

    ムヌルさんの質問に直接回答していなかったので、追加でコメントします。

    >①この関数の処理が行われるタイミングはいつか?

    当然、呼び出されたらすぐに処理されます。その結果は受信データの格納バッファ等を定義しているだけです。UARTの受信動作とは全く無関係です。

    >この関数の戻り値(MD_OK等)は必ず使用しないとダメか?

    単に受信データ数が0ならエラーにしているだけで、大して意味があるような戻り値ではありません。確実に、0以外の引数しか使わないなら、戻り値に意味はありません。

    >この関数の戻り値を使用しない場合、void型に変更し、戻り値を使用しない

    注意が必要です。コード生成では、生成をし直すたびに戻り値ありに初期化されます。やるなら、コード生成は、初期設定だけにして、残りは全て自分でコーディングするようにしてください。

    それが出来なかったら、#ifdef等の条件付きコンパイルを使う必要があります。プログラム部だけでなく、ヘッダ・ファイルも関係してくるので、

    これは、あまりお勧めできません。

    以上

  • チョコ様

    ご返信ありがとうございます。

    ①受信感知ですぐに実行

    ②戻り値に意味はない(使用しなくて良い)

    ③変更する場合は初期化のみの記述にとどめ、そこから先は自分でかく。

    という風に解釈致しました(間違っていたらご指摘ください)。

  • チョコです。

    >①受信感知ですぐに実行

    いいえ、違います。受信の実際の動作とは全く無関係に、単に関数を呼び出すと実行されます。

    >戻り値に意味はない(使用しなくて良い)戻り値に意味はない(使用しなくて良い)

    意味がないことはないですが。「わざわざ使うほどのことはないでしょう」程度です。

    >③変更する場合は初期化のみの記述にとどめ、そこから先は自分でかく。

    はい、そうです。

    ちなみに、前回紹介した「RL78コード生成へのリングバッファ追加」では、コード生成されたコードにそのままFIFOを追加しても動くようにしてあるので、「R_UART0_Receive」は全く使わなくても受信処理ができるようになっています。その代わり、FIFOの状態を確認して、データを受信していたら、受信したデータをFIFOから読み出す処理になります。(そのための関数は準備してあります。)

    以上

Reply
  • チョコです。

    >①受信感知ですぐに実行

    いいえ、違います。受信の実際の動作とは全く無関係に、単に関数を呼び出すと実行されます。

    >戻り値に意味はない(使用しなくて良い)戻り値に意味はない(使用しなくて良い)

    意味がないことはないですが。「わざわざ使うほどのことはないでしょう」程度です。

    >③変更する場合は初期化のみの記述にとどめ、そこから先は自分でかく。

    はい、そうです。

    ちなみに、前回紹介した「RL78コード生成へのリングバッファ追加」では、コード生成されたコードにそのままFIFOを追加しても動くようにしてあるので、「R_UART0_Receive」は全く使わなくても受信処理ができるようになっています。その代わり、FIFOの状態を確認して、データを受信していたら、受信したデータをFIFOから読み出す処理になります。(そのための関数は準備してあります。)

    以上

Children
No Data