お世話になっております、ムヌルです。
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を無くす程度)
チョコです。
ムヌルさんの質問に直接回答していなかったので、追加でコメントします。
>①この関数の処理が行われるタイミングはいつか?
当然、呼び出されたらすぐに処理されます。その結果は受信データの格納バッファ等を定義しているだけです。UARTの受信動作とは全く無関係です。
>この関数の戻り値(MD_OK等)は必ず使用しないとダメか?
単に受信データ数が0ならエラーにしているだけで、大して意味があるような戻り値ではありません。確実に、0以外の引数しか使わないなら、戻り値に意味はありません。
>この関数の戻り値を使用しない場合、void型に変更し、戻り値を使用しない
注意が必要です。コード生成では、生成をし直すたびに戻り値ありに初期化されます。やるなら、コード生成は、初期設定だけにして、残りは全て自分でコーディングするようにしてください。
それが出来なかったら、#ifdef等の条件付きコンパイルを使う必要があります。プログラム部だけでなく、ヘッダ・ファイルも関係してくるので、
これは、あまりお勧めできません。
以上
チョコ様
ご返信ありがとうございます。
①受信感知ですぐに実行
②戻り値に意味はない(使用しなくて良い)
③変更する場合は初期化のみの記述にとどめ、そこから先は自分でかく。
という風に解釈致しました(間違っていたらご指摘ください)。
>①受信感知ですぐに実行
いいえ、違います。受信の実際の動作とは全く無関係に、単に関数を呼び出すと実行されます。
>②戻り値に意味はない(使用しなくて良い)戻り値に意味はない(使用しなくて良い)
意味がないことはないですが。「わざわざ使うほどのことはないでしょう」程度です。
>③変更する場合は初期化のみの記述にとどめ、そこから先は自分でかく。
はい、そうです。
ちなみに、前回紹介した「RL78コード生成へのリングバッファ追加」では、コード生成されたコードにそのままFIFOを追加しても動くようにしてあるので、「R_UART0_Receive」は全く使わなくても受信処理ができるようになっています。その代わり、FIFOの状態を確認して、データを受信していたら、受信したデータをFIFOから読み出す処理になります。(そのための関数は準備してあります。)