LLVMにRenesas RL78をPortingしようとしているのかな?

こんにちは。NoMaYです。

ウェブで調べ物をしていて気付いたのですが、RenesasさんはLLVM(今はGCCと並ぶ著名なフリーコンパイラ)にRL78をPortingしようとしているのかも、、、

[llvm-dev] New LLVM backend for Renesas RL78 MCU
Sebastian Perta via llvm-dev llvm-dev at lists.llvm.org
Wed Apr 1 10:26:05 PDT 2020
lists.llvm.org/pipermail/llvm-dev/2020-April/140546.html
 

Parents
  • こんにちは。NoMaYです。

    以前、(旧バージョンの)LLVM-RL78でビット操作命令を使ったコードが出力されていなかった件を書いたのですが、つい先日、RXマイコンのFITモジュールにおいてCソースが(ソースの書き方により)ビット操作命令を使ったコードに展開されていなかったことに起因する割り込み関連の不具合の不具合通知が出ていましたね。

    【注意事項】RX ファミリ SCI モジュールFirmware Integration Technology, RX Driver Package
    www.renesas.com/jp/ja/document/tnn/notes-rx-family-sci-module-firmware-integration-technology-rx-driver-package

    1.3 内容と発生条件

    プログラムで調歩同期式R_SCI_Send() またはR_SCI_Receive() がコールされると、エラーが発生する可能性があります。特定の状況下では、不要な1バイトデータが送信されます。

    原因は調歩同期式の受信ルーチン中にコールされる非アトミックマクロDISABLE_RXI_INTとENABLE_RXI_INTの影響による、IENxビットのデータ破壊です。


    [追記]

    まだFITモジュールのSCIモジュールのソースを再確認していないですけど、上記の2つのマクロがタスク切り替えに対して安全でないという以下の件はどうなのかな、、、

    e2 studio v7.5.0のFreeRTOS ProjectでVisual Expression+Renesas RX Simulator/TB-RX65Nで試せるSample Programを作ってみた
    japan.renesasrulz.com/cafe_rene/f/forum21/5970/e2-studio-v7-5-0-freertos-project-visual-expression-renesas-rx-simulator-tb-rx65n-sample-program/34046#34046

    RTOS未使用時は大丈夫だけれどもRTOS使用時は拙い排他制御のやり方(通常処理側と割り込み処理側の排他制御)

    ・個別の割り込みマスクフラグを使用して割り込み一旦禁止と割り込み再度許可を行う

    理由

    ・RTOSによるタスク切り替えが上記による割り込み禁止期間中に発生すると禁止期間がミリ秒オーダーになってしまう(タスク切り替えにより暫くの間は他タスクに行ってしまうから)

    対応

    ・RTOS側で用意されているクリティカルセクションへの出入り関数(FreeRTOSならtaskENTER_CRITICAL()とtaskEXIT_CRITICAL()など)を使用するように手を加える


Reply
  • こんにちは。NoMaYです。

    以前、(旧バージョンの)LLVM-RL78でビット操作命令を使ったコードが出力されていなかった件を書いたのですが、つい先日、RXマイコンのFITモジュールにおいてCソースが(ソースの書き方により)ビット操作命令を使ったコードに展開されていなかったことに起因する割り込み関連の不具合の不具合通知が出ていましたね。

    【注意事項】RX ファミリ SCI モジュールFirmware Integration Technology, RX Driver Package
    www.renesas.com/jp/ja/document/tnn/notes-rx-family-sci-module-firmware-integration-technology-rx-driver-package

    1.3 内容と発生条件

    プログラムで調歩同期式R_SCI_Send() またはR_SCI_Receive() がコールされると、エラーが発生する可能性があります。特定の状況下では、不要な1バイトデータが送信されます。

    原因は調歩同期式の受信ルーチン中にコールされる非アトミックマクロDISABLE_RXI_INTとENABLE_RXI_INTの影響による、IENxビットのデータ破壊です。


    [追記]

    まだFITモジュールのSCIモジュールのソースを再確認していないですけど、上記の2つのマクロがタスク切り替えに対して安全でないという以下の件はどうなのかな、、、

    e2 studio v7.5.0のFreeRTOS ProjectでVisual Expression+Renesas RX Simulator/TB-RX65Nで試せるSample Programを作ってみた
    japan.renesasrulz.com/cafe_rene/f/forum21/5970/e2-studio-v7-5-0-freertos-project-visual-expression-renesas-rx-simulator-tb-rx65n-sample-program/34046#34046

    RTOS未使用時は大丈夫だけれどもRTOS使用時は拙い排他制御のやり方(通常処理側と割り込み処理側の排他制御)

    ・個別の割り込みマスクフラグを使用して割り込み一旦禁止と割り込み再度許可を行う

    理由

    ・RTOSによるタスク切り替えが上記による割り込み禁止期間中に発生すると禁止期間がミリ秒オーダーになってしまう(タスク切り替えにより暫くの間は他タスクに行ってしまうから)

    対応

    ・RTOS側で用意されているクリティカルセクションへの出入り関数(FreeRTOSならtaskENTER_CRITICAL()とtaskEXIT_CRITICAL()など)を使用するように手を加える


Children
No Data