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
 

  • NoMaYさん、こんにちは。情報ありがとうございます。
    上記のプログラムサイズは、ライブラリ分と実プログラム分の比率は大体どのような比率かわかりますでしょうか?

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

    > ライブラリ分と実プログラム分の比率は大体どのような比率かわかりますでしょうか?

    明日以降になりますが、調べて、投稿しようと思います。

  • ありがとうございます!サイズ向けの最適化能力を見る場合はライブラリ分は除いた方がよいのかなと思いました。
    こちらもLLVMを試している所なので、情報があれば共有させて頂きますね

  • こんにちは。NoMaYです。

    ライブラリ分その他を除いた手元のソースから生成されたコードのサイズは以下の通りでした。

    手持ちのプログラムその2

    LLVM-RL78   41,195 バイト@10.0.0.202107
    CC-RL       33,258 バイト@V1.10.00

     
    なお、ライブラリ分その他を含んだサイズは以下の通りでした。(先日投稿した内容です。)

    手持ちのプログラムその2

    LLVM-RL78   46,198 バイト@10.0.0.202107
    CC-RL       34,766 バイト@V1.10.00

     
    以下、元データです。なお、マップファイル全体や生成されたリストファイルやダンプファイルを以下のzipファイルに固めてあります。

    rl78g14_llvm_rtosdemo_map_dump_20210804.zip

    LLVM-RL78(10.0.0.202107)の場合:

    手元のソースから生成されたコードのサイズ = (2c2  - d8) + (39c4  - 3820) + (d82a - 3acd) = a0eb = 41195 バイト

    mapファイルより抜粋

         VMA      LMA     Size Align Out     In      Symbol
    ...略...
          d8       d8      1ea     2 .lowtext
          d8       d8        0     2         <internal>:(.plt)
          d8       d8        4     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/port.o:(.lowtext)
          d8       d8        4     1                 _prvTaskExitError
          dc       dc       47     1         ./src/FreeRTOS/Source/portable/Renesas/LLVMRL78/portasm.o:(.lowtext.vPortYield)
          dc       dc        0     1                 _vPortYield
          dc       dc        0     1                 _vSoftwareInterruptISR
    ...略...
         29a      29a       15     1         ./src/r_cg_serial_user.o:(.lowtext.u_wdt_interrupt)
         29a      29a       15     1                 _u_wdt_interrupt
         2af      2af       13     1         ./src/r_cg_serial_user.o:(.lowtext._u_wdt_interrupt)
         2af      2af       13     1                 __u_wdt_interrupt
         2c2      2c2        0     1         . = ALIGN ( 2 )
    ...略...
        3820     3820     aa84     4 .text
        3820     3820        0     1         . = ALIGN ( 2 )
        3820     3820       ae     4         ./src/FreeRTOS_Demo/Full_Demo/RegTest.o:(.text)
        3820     3820        0     1                 _vRegTest1Task
        3831     3831        0     1                 .loop1
        3878     3878        0     1                 _vRegTest2Task
        3889     3889        0     1                 .loop2
        38d0     38d0       f2     4         ./generate/start.o:(.text)
        38d2     38d2        0     1                 _PowerON_Reset
    ...略...
        39b4     39b4        0     1                 __rl78_init
        39bd     39bd        0     1                 __rl78_fini
        39c4     39c4       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memcpy.o):(.text)
        39c4     39c4       11     1                 _memcpy
        39d8     39d8       13     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memset.o):(.text)
        39d8     39d8       13     1                 _memset
        39ec     39ec        f     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memchr.o):(.text)
        39ec     39ec        f     1                 _memchr
        39fc     39fc       24     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-memmove.o):(.text)
        39fc     39fc       24     1                 _memmove
        3a20     3a20       11     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcmp.o):(.text)
        3a20     3a20       11     1                 _strcmp
        3a34     3a34        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strcpy.o):(.text)
        3a34     3a34        d     1                 _strcpy
        3a44     3a44        b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strlen.o):(.text)
        3a44     3a44        b     1                 _strlen
        3a50     3a50       1b     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncat.o):(.text)
        3a50     3a50       1b     1                 _strncat
        3a6c     3a6c       16     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncmp.o):(.text)
        3a6c     3a6c       16     1                 _strncmp
        3a84     3a84       14     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-strncpy.o):(.text)
        3a84     3a84       14     1                 _strncpy
        3a98     3a98       26     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(mulsi3.S.obj):(.text)
        3a98     3a98        0     1                 __COM_lmul
        3a98     3a98        0     1                 ___mulsi3
        3ac0     3ac0        d     4         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\rl78\s3\lib\baremetal\libclang_rt.builtins-rl78.a(ashlhi3.S.obj):(.text)
        3ac0     3ac0        0     1                 ___ashlhi3
        3acd     3acd        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__malloc_r)
        3acd     3acd        5     1                 __malloc_r
        3ad2     3ad2        4     1         ./src/frtos_startup/freertos_helper.o:(.text.__free_r)
        3ad2     3ad2        4     1                 __free_r
        3ad6     3ad6        5     1         ./src/frtos_startup/freertos_helper.o:(.text.__realloc_r)
        3ad6     3ad6        5     1                 __realloc_r
        3adb     3adb       2f     1         ./src/frtos_startup/freertos_helper.o:(.text._vTaskNotifyGiveFromISR_R_Helper)
        3adb     3adb       2f     1                 _vTaskNotifyGiveFromISR_R_Helper
    ...略...
        d819     d819       11     1         ./src/r_main.o:(.text._main)
        d819     d819       11     1                 _main
        d82a     d82a       42     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-sprintf.o):(.text._sprintf)
        d82a     d82a       42     1                 _siprintf
        d82a     d82a       42     1                 _sprintf
        d86c     d86c      112     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.___ssputs_r)
        d86c     d86c      112     1                 ___ssputs_r
        d97e     d97e      2a0     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text.__svfprintf_r)
        d97e     d97e      2a0     1                 __svfiprintf_r
        d97e     d97e      2a0     1                 __svfprintf_r
        dc1e     dc1e       13     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_0)
        dc1e     dc1e       13     1                 _OUTLINED_FUNCTION_0
        dc31     dc31        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_1)
        dc31     dc31        a     1                 _OUTLINED_FUNCTION_1
        dc3b     dc3b        f     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_2)
        dc3b     dc3b        f     1                 _OUTLINED_FUNCTION_2
        dc4a     dc4a        c     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_3)
        dc4a     dc4a        c     1                 _OUTLINED_FUNCTION_3
        dc56     dc56        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_4)
        dc56     dc56        a     1                 _OUTLINED_FUNCTION_4
        dc60     dc60        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_5)
        dc60     dc60        8     1                 _OUTLINED_FUNCTION_5
        dc68     dc68        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_6)
        dc68     dc68        8     1                 _OUTLINED_FUNCTION_6
        dc70     dc70        8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_7)
        dc70     dc70        8     1                 _OUTLINED_FUNCTION_7
        dc78     dc78        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-svfprintf.o):(.text._OUTLINED_FUNCTION_8)
        dc78     dc78        6     1                 _OUTLINED_FUNCTION_8
        dc7e     dc7e      1b8     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_common)
        dc7e     dc7e      1b8     1                 __printf_common
        de36     de36      449     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text.__printf_i)
        de36     de36      449     1                 __printf_i
        e27f     e27f        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_0)
        e27f     e27f        7     1                 _OUTLINED_FUNCTION_0
        e286     e286        7     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_1)
        e286     e286        7     1                 _OUTLINED_FUNCTION_1
        e28d     e28d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_2)
        e28d     e28d        6     1                 _OUTLINED_FUNCTION_2
        e293     e293        a     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_3)
        e293     e293        a     1                 _OUTLINED_FUNCTION_3
        e29d     e29d        6     1         C:\Renesas\LLVM\RL78\10.0.0.202107\lib\clang\LLVM for Renesas RL78 10.0.0.202107\..\..\..\rl78\lib\s3\libc_nano.a(lib_a-nano-vfprintf_i.o):(.text._OUTLINED_FUNCTION_4)
        e29d     e29d        6     1                 _OUTLINED_FUNCTION_4
        e2a3     e2a3        1     1         . = ALIGN ( 2 )
        e2a4     e2a4        0     1 .textf
        e2a4     e2a4        0     1         . = ALIGN ( 2 )
    ...略...

     
    CC-RL(V1.10)の場合:

    手元のソースから生成されたコードのサイズ = 24b + 7f9f = 81ea = 33258 バイト(10進)

    mapファイルより抜粋

    SECTION                            START      END         SIZE   ALIGN
    ...略...
    .text
                                      00000273  000004bd       24b   1
    .RLIB
                                      000004cb  000004e9        1f   1
    .SLIB
                                      000004ea  00000aef       606   1
    ...略...
    .textf
                                      00003912  0000b8b0      7f9f   1
    ...略...                                                                                               
    SECTION=
    FILE=                               START        END    SIZE
      SYMBOL                            ADDR        SIZE    INFO      COUNTS  OPT
    ...略...
    SECTION=.text
    FILE=.\generate\CallWalker\cstart.obj
                                      00000273  000002bb        49
      _start
                                      00000273         0   entry,g         0
    ...略...
      _u_wdt_interrupt@1
                                      00000497        13   func ,l         0
      __u_wdt_interrupt@1
                                      000004aa        14   func ,l         1  ch

    SECTION=.RLIB
    FILE=memcpy
                                      000004cb  000004db        11
      _memcpy
                                      000004cb         0   none ,g         8
    FILE=memset
                                      000004dc  000004e9         e
      _memset
                                      000004dc         0   none ,g         d

    SECTION=.SLIB
    FILE=sprintf_tiny
                                      000004ea  000005a3        ba
      _sprintf_tiny
                                      000004ea        a2   func ,g         6
      __REL_sp@1
                                      0000058c        18   func ,l         2
    FILE=strcmp
                                      000005a4  000005b4        11
      _strcmp
                                      000005a4         0   none ,g         1
    FILE=strcpy
                                      000005b5  000005c1         d
      _strcpy
                                      000005b5         0   none ,g         5
    FILE=strlen
                                      000005c2  000005cc         b
      _strlen
                                      000005c2         0   none ,g         d
    FILE=strncat
                                      000005cd  000005e7        1b
      _strncat
                                      000005cd         0   none ,g         4
    FILE=strncmp
                                      000005e8  000005fd        16
      _strncmp
                                      000005e8         0   none ,g         1
    FILE=strncpy
                                      000005fe  00000611        14
      _strncpy
                                      000005fe         0   none ,g         3
    FILE=_REL_print_tiny
                                      00000612  00000ae5       4d4
      __REL_print_tiny
                                      00000612       41b   func ,g         1
      __CommonCode@17
                                      00000a2d         6   func ,l         3
      __CommonCode@16
                                      00000a33         6   func ,l         5
      __CommonCode@14
                                      00000a39         a   func ,l         4
      __CommonCode@13
                                      00000a43         9   func ,l         2
      __CommonCode@12
                                      00000a4c         a   func ,l         2
      __CommonCode@11
                                      00000a56        10   func ,l         2
      __CommonCode@10
                                      00000a66         f   func ,l         2
      __CommonCode@9
                                      00000a75        12   func ,l         2
      __CommonCode@8
                                      00000a87         7   func ,l         2
      __CommonCode@7
                                      00000a8e         6   func ,l         3
      __CommonCode@18
                                      00000a94         8   func ,l         2
      __CommonCode@6
                                      00000a9c         7   func ,l         2
      __CommonCode@15
                                      00000aa3         3   func ,l         2
      __CommonCode@5
                                      00000aa6         3   func ,l         8
      __CommonCode@4
                                      00000aa9         9   func ,l         2
      __CommonCode@3
                                      00000ab2        1d   func ,l         5
      __CommonCode@2
                                      00000acf         5   func ,l         6
      __CommonCode@1
                                      00000ad4         7   func ,l         5
      __CommonCode@0
                                      00000adb         b   func ,l         2
    FILE=isdigit
                                      00000ae6  00000aef         a
      _isdigit
                                      00000ae6         0   none ,g         1
    ...略...
    SECTION=.textf
    FILE=.\generate\CallWalker\cstart.obj
                                      00003912  00003959        48
      _INIT_BSS
                                      00003912         0   none ,g         1
      _INIT_DATA
                                      00003931         0   none ,g         1
      _exit
                                      00003958         0   none ,g         2
    FILE=.\generate\CallWalker\resetprg.obj
                                      0000395a  00003968         f
      _PowerON_Reset_PC
                                      0000395a         f   func ,g         1  ch
    ...略...
    FILE=.\src\UART3.obj
                                      0000b7fc  0000b8b0        b5
      _u_uart3_init_bf
                                      0000b7fc        16   func ,g         1  ch
      _u_uart3_get_blk
                                      0000b812        79   func ,g         1  ch
      _u_uart3_callback_receivedata
                                      0000b88b        26   func ,g         1

     

  • 中の人です。

    コンパイラ開発チームに見解を確認しましたので、展開します。

     

    CC-RLは長年の追加/改善によりリリース当初より大幅に最適化能力を向上させてきました。(ULPMark世界最高スコア獲得もこの最適化が貢献してます。)

     

    LLVM for RL78も最適化能力は高いですが、プログラムにも因りますが、CC-RLと比較するとまだ差が大きいケースもあります。

    今後、LLVM for RL78へも技術支援を行って最適化を強化していきたいと思います。

    NoMaYさんが指摘されていたビット操作命令の問題やレジスタバンク0固定の問題にも技術支援を行わせて頂きました。ありがとうございました。

    結果は7月修正版に反映されています。

     

    NoMaYさんの上記データ&ファイルも参考にさせて頂きます。

    今後もRulzあるいはCyberThorへの積極的なアクセスを頂けると助かります。

  • チョコです。

    >CC-RLは長年の追加/改善によりリリース当初より大幅に最適化能力を向上させてきました。

    そうなんですか。

    私は、アセンブラの時代の人間ですが(実はハードの人間ですが)CC-RLの吐き出したコードを逆アセンブラで眺めて、「無駄なことをやっているなぁ」と感じていたんです。やはり、普通とは感覚がずれているのかなぁ。

  • こんにちは。NoMaYです。

    ものは試しとしてLLVM-RL78&C++&RL78スマートコンフィグレータ&Renesas RL78 Simulator&FreeRTOSという組み合わせのプロジェクトをe2 studio 2021-07で作ってみました。ソース一式はGitHubの以下の場所に置いてあります。(FreeRTOSのLLVM-RL78ポートレイヤは独自対応版です。FreeRTOSのカーネルソースはV10.4.4です。)

    github.com/NoMaY-jp/RL78_SmartConfigurator_examples_RL78FPB_LLVMRL78/tree/main/00_SimDebuggerConsole_printf/rl78g23_64p_fpb

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


     

  • こんにちは。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()など)を使用するように手を加える


  • こんにちは。NoMaYです。

    RL78/G15?(少ピン、少ROM/RAM、という製品ですかね。)

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




     

  • こんにちは。NoMaYです。

    こんなページが出来ていました。コンパイラはLLVM-RL78ですね。

    ArduinoCore-rl78g15_fpb_20p
    github.com/renesas/ArduinoCore-rl78g15_fpb_20p

    [追記]

    Renesas Electronics RL78/G15 Low Power Microcontrollers
    www.mouser.jp/new/renesas/renesas-rl78-g15-mcus/