RL78 SmartConfiguratorで気になった点とか改善する案とか報告してみるスレッド

こんにちは。NoMaYです。

いま2つ気になっています。

(1) ICCRL78とLLVM-RL78(とGNURL78)でワーニングレベルを上げるとワーニングがとてもたくさん出る
(2) RL78スマートコンフィグレータGUI上でオンチップデバッグトレースを使用する設定にしても予約RAM領域を空けていない

  • チョコさん、NoMaYさん

    シェルティです。こんにちは。

    ツール部門のメンバと相談開始しました。対応を進めたいと思っています。

    種々フィードバックいただき感謝です。検討状況進捗などまた書き込みます。

    以上です

  • チョコです。

    RL78/G23FPBにRL78/G14FPBからArduinoのデジタル入出力関数を移植することを検討していて、少し手抜きをしようと考えて、SCでデジタル入出力の端子兼用機能であるアナログ入力(デバイスの初期状態)を初期設定でデジタル入力に設定しようと考えました。そこで、SCで以下のように設定を行いました。

    すると、Config_PORT.cは以下のようにコード生成されていました。

    PDIDIS0レジスタで該当するビットが1になっていて、確かに設定内容には合っているのですが、違和感を禁じえません。

    PDIDIS0レジスタはディフォルトでは0になっているのをわざわざセットしています。

    これは、以下のように入力バッファがオプション的な扱いになっているのが原因していると思われます。

    出力に設定すると、これは選択できなくなりますが、入力に指定したときにもこの設定はなくていいはずです。

    ここで、念のためにP00を出力に設定してコード生成すると、以下のように、P00でもPDIDIS0レジスタの該当するビットが1になっています。

    これは、PDIDIS0レジスタの意味を取り違えていると考えられます。

    ハードウェア マニュアルには、以下のように書かれています。

    つまり、入力や出力の時にPDIDIS0レジスタの該当するビットを1にするのは明らかに間違いです。

    どちらかというと、未使用時のみ選択できるようにすべきでそれ以外では0にしておくべきです。

    または、入力や出力と同等にして、「入力バッファオフ」の選択子にすべきです。

    以上

  • チョコです。

    >つまり、入力や出力の時にPDIDIS0レジスタの該当するビットを1にするのは明らかに間違いです。

    >どちらかというと、未使用時のみ選択できるようにすべきでそれ以外では0にしておくべきです。

    >または、入力や出力と同等にして、「入力バッファオフ」の選択子にすべきです。

    以下のように修正します。

    PDIDIS0レジスタの該当するビットを1にできるのは、未使用かNchオープンドレイン出力だけにすべきです。(この2つの場合には、無条件に1にしてもいいかもしれません。)

     

  • チョコです。

    TM07をインターバルタイマに設定した状態で、IIC00を追加したところ、ワーニングが発生しました。

    これは、どうもSCL00が使用する端子がリダイレクトした場合のTO07とぶつかっているからだと思われます。

    これは明らかにおかしいワーニングです。TM07とIIC00の接点はこのP10しかありません。

    しかし、TM07はインターバル・タイマに設定しているので、この端子を使うことはないのでリダイレクトしたとしても問題ないはずです。

    そもそも、タイマの出力を未使用時に他の兼用機能に影響するような初期化をしていたら、そのようなコードを出すことが問題では。

    以上

  • チョコです。

    SCが生成した簡易IICの割り込み処理の先頭にコード生成にはなかったソフトウェアタイマによる遅延処理が追加されています。

    これ自体は、以前から私がタイマ割り込みでやっていることと同じ目的(RL78の簡易IICには、クロックストレッチがないことへの対策)だと思います。この目的だけ考えるとこれでいいのですが、このやり方では、この遅延時間の間は割り込み処理の中になるので、他の割り込みを受け付けできません。おそらく10μ秒以上の時間はあるかと思います。この点をどこかで明確にしておくべきでしょう。出来れば、ここはハードウェアのタイマを使うことで、CPU時間を解放することをお勧めします。

    複数のリソースを組み合わせることはコード生成機能としては、難しいかもしれませんが。

  • こんにちは。NoMaYです。

    e2 studio 2021-07のRL78スマートコンフィグレータGUI上からBSPモジュールをアップデートしたのですけど、以下の障害が発生しました。(詳細は画面コピーを参照して下さい。) CS+と単体RL78スマートコンフィグレータも同様です。

    (1) アップデート操作は正常終了したけれどBSPモジュールのソースがアップデートされていない

    正確には、新しいBSPモジュールで追加されたソースは追加されましたが、既にあったソースは変更されていませんでした。

    (2) アップデート操作は正常終了したけれどプロジェクトを削除して再インポートするとBSPモジュールのバージョンが古いまま

    これは上記の(1)で実質的にはソースがアップデートされていなかったので古いままというのは分からなくは無いですけど、そもそもアップデート操作は正常終了しているのにそうなっているのは変だと思います。もっとも、別の見方も出来まして、SCFGファイルの保存操作をしていなかったというのはあるのですが、e2 studioのツールバーの保存ボタンは押せない状態でしたし、プロジェクトを削除する時に何の警告も表示されなかったのも変だと思います。(記憶では、RXの方だと思いますけど、SCFGファイルを保存せずにプロジェクトを削除しようとすると警告が表示されていたと思うのです。)

    以下、e2 studioの画面コピーです。

    アップデート操作は正常終了









    BSPモジュールのソースがアップデートされていない(左ペインが新規作成したもの、右ペインがアップデータしたもの)



    プロジェクトを削除して再インポートするとBSPモジュールのバージョンが古いまま

     
    [追記]

    元の状態に戻してもう一回アップデート操作をやり直して確認したところ、アップデート操作直後はBSPモジュールのバージョンは新しくなっていました。ですので、SCFGファイルを保存していなかった(保存することが出来なかった)というのが上記の(2)の肝心な点なのかなと思いました。

    以下、e2 studioの画面コピーです。


     

  • チョコです。

    先ほどコメントを書き込みましたが、”スマートコンフィグレータのCG で生成した SCI 調歩同期のコードで、連続複数回の送信が出来ません"でもコード生成の時代からの通信処理に共通の問題が上がっていました。

    https://japan.renesasrulz.com/cafe_rene/f/forum5/7355/cg-sci

    ベアメタル型のプログラミングに対応しているのでしょうが、あまりにも不親切です。最低でも、完了フラグの処理くらいはつけておくべきです。できれば、そのフラグを使って通信完了までループするようなAPI関数も準備してほしいです。

    以上

  • こんにちは。NoMaYです。

    以前から私は送信完了や受信完了をウェイトするタイプのAPI関数名として既存のAPI関数名の末尾に_UWT(Unlimited Wait Timeの意)を付けたものを提案していましたが(とは言えはっきりした行為を行ってはいませんでしたが)、今朝、以下ではどうだろうか?という考えが思い浮かびました。サンプルプログラム置き場に投稿してある自前のサンプルプログラムで試行してみようかなと思い始めました。(正直、どうせやるならBSPモジュールも最新版にしてとも思うものの、とっかえるのがちょっと億劫でもあり、そこは今のまま放置するかも知れませんけれど。)

    以前の案: API関数の末尾に _UWT を付ける (先頭が U_ なのは自作関数であったからです)

    例)

    void U_Config_SCI12_IIC_Master_Send_UWT(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num) ← RXの例
    void U_Config_UART1_Send_UWT(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num) ← RL78の例

     
    今朝の案: API関数の引数に、完了を待つ/待たないのフラグを追加、してみる(boolが方針的に不可ならuint8_tです)

    例)

    void U_Config_SCI12_IIC_Master_Send_Ex(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num, bool tx_wflag) ← RXの例
    void U_Config_UART1_Send_Ex(uint8_t adr, uint8_t * const tx_buf, uint16_t tx_num, bool tx_wflag) ← RL78の例

    tx_wflagは MD_WAIT (true) もしくは MD_NOWAIT (false) の何れかです(どちらも案としてです(正直'NOWAIT'がしっくりこない)) 2021/08/15 08:00 変更
    tx_wflagは MD_WAIT_FINISH (true) もしくは MD_DONT_WAIT_FINISH (false) の何れかです(どちらも案ですけれど)

     
    RX231のコード生成を用いた簡易IIC通信について
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/6169/rx231-iic/34171#34171

    TB-RX65N/RX130/RX231+CSplus sample program
    japan.renesasrulz.com/cafe_rene/f/002-2095199602/6870/tb-rx65n-rx130-rx231-csplus-sample-program/36990#36990
     

  • こんにちは。NoMaYです。

    e2 studio 2021-07でLLVM-RL78&C++&RL78スマートコンフィグレータという組み合わせのプロジェクトを試していて気付いたのですけれど、C++側のソースのインクルードパス設定に以下の画面コピーのようにr_bspとr_configのパスが無いですね。しかも、手作業で追加してもコード再生成するとe2 studioが強制的に削除してしまいますね。これには困惑してしまいます。

    問題点:

    (1) C++側のソースのインクルードパス設定にr_bspとr_configのパスが無い
    (2) 手作業で追加してもコード再生成するとe2 studioが強制的に削除してしまう

    以下、e2 studioの画面コピーです。

    C側のソースのインクルードパス設定にはr_bspとr_configのパスが有る


    C++側のソースのインクルードパス設定にはr_bspとr_configのパスが無い

     

  • チョコです。

    RL78/G23で32ビット・インターバル・タイマを2つの16ビット・インターバール・タイマで使うように設定してみました。

    すると、割り込みの設定のところを眺めると、下のようにワーニングが出ています。

    これは、明らかにおかしなメッセージです。

    32ビット・インターバル・タイマの割り込みは1本しか存在しません。1本の割り込みなので、「複数の割り込み機能に対して1つのレジスタ・バンクを指定することはできません。」は何を言っているのか不明な(手抜きの)ワーニングです。

    以上