こんにちは。NoMaYです。RL78/G23-64p Fast Prototyping Board の LLVM-RL78 & C++ & RL78スマートコンフィグレータ & FreeRTOS という組み合わせのサンプルプログラム(e2 studioプロジェクト)です。(サンプルプログラム置き場とGitHubにも置いています。) 現在、以下のものがあります。なお、C++と言っても、以前に投稿したTB-RX65N/RX130/RX231(とRX72N Envision Kit)でのCS+のサンプルプログラムのCソースコードと内容は殆ど同じだったり、また、FreeRTOSと言っても、メインタスクを1つ作っているだけだったり、というものです。(今回、FreeRTOSのLLVM-RL78ポートレイヤは独自対応版(野良犬ならぬ野良ポートレイヤです)、FreeRTOSのカーネルソースはV10.4.4、となっています。)サンプルプログラム置き場japan.renesasrulz.com/cafe_rene/m/sample_program/467GitHubのリポジトリgithub.com/NoMaY-jp/RL78_SmartConfigurator_examples_RL78FPB_LLVMRL78/tree/cafe_reneシミュレータデバッガコンソール出力シリアルコンソール出力シリアルコンソール入力シリアルコンソール入力確認シリアルコンソールのサンプルプログラムはボード上のFT232RQに接続されたUART0になっていますが、同じくボード上のFT232RQを使用するCOMPort通信デバッグ機能とは競合しますので、シリアルコンソールのサンプルプログラムではCOMPort通信デバッグは出来ません。ボード上のFT232RQに関しては、以下のスレッドに投稿したように設定を変更することで、動作を速くしたり面倒を減らしたり、ということが出来ます。RL78/G23 Fast Prototyping Boardを買いましたjapan.renesasrulz.com/cafe_rene/f/forum18/7087/rl78-g23-fast-prototyping-board/38050#38050japan.renesasrulz.com/cafe_rene/f/forum18/7087/rl78-g23-fast-prototyping-board/39403#39403以下、サンプルプログラムの例です。シミュレータデバッガコンソール出力シリアルコンソール出力00_SimDebuggerConsole_printf/10_SerialConsole_printf/
void main_task(void *pvParameters){ INTERNAL_NOT_USED(pvParameters); LED0 = LED_ON; for (;;) { printf( "Hello World\r\n" ); vTaskDelay( pdMS_TO_TICKS( 1000 ) ); LED0 = ~LED0; vTaskDelay( pdMS_TO_TICKS( 1000 ) ); LED0 = ~LED0; } /* vTaskDelete(NULL); */}
実行例:
こんにちは。NoMaYです。リンクエラーに対処出来ました。実は、アセンブラソースに、LLVM-RL78のリンカ不具合回避処置が記述されていたのですけれども、LLVM-RL78 10.0.0.202212~10.0.0.202301で、(従来からの作業のCC-RLのコンパイラの拡張文法の完全コピーを目標とする作業に加えて)CC-RLのアセンブラの文法についてもそれなりに(?)コピーする作業が行われていて、そのことによってリンカ不具合回避処置のアセンブラの記述が(分かり難いことに)リンクエラーを引き起こしていました。(ということで、後日、ソースをアップデートします。(元のFreeRTOS kernelのforkの方もやっとかないと、、、2年近く(?)放置してましたけれども、、、))修正前:
; A workaround to prevent the symbols getting wrongly linked due to an; LLVM-RL78 clang ld.lld's incorrect relocation address problem. .section .text .byte _vTaskSwitchContext .byte _uxSavedTaskStackPointer
リンクエラーメッセージ:
ld.lld: error: ../src/FreeRTOS/Source/portable/Renesas/LLVMRL78\portasm.S:96:(.text+0x23): relocation R_RL78_DIR8U out of range: 17419 is not in [0, 255]ld.lld: error: ../src/FreeRTOS/Source/portable/Renesas/LLVMRL78\portasm.S:96:(.text+0x24): relocation R_RL78_DIR8U out of range: 1034738 is not in [0, 255]
修正後:
; A workaround to prevent the symbols getting wrongly linked due to an; LLVM-RL78 clang ld.lld's incorrect relocation address problem. .section .text .byte LOW(_vTaskSwitchContext) .byte LOW(_uxSavedTaskStackPointer)
無し
以下、LLVM for Renesas RL78 10.0.0.202301のリリースノートの抜粋です。Release Notes: LLVM FOR RENESAS RL78 10.0.0.202301llvm-gcc-renesas.com/release-notes/rl78/latest/10.0.0.202301/release_notes.pdf「2. [Improvement] Partial CC-RL ASM expression/directive support (ver. 202212)Support for most CC-RL assembly expressions, operators and directives was added.Relocatable symbol difference expressions are now supported.Ex:mov a, #LOW(FOO - BAR)As a part of this change, %lo16() and %hi16() were replaced by LOWW() and HIGHW().For details please refer to LLVM for Renesas RL78 User Manual Section. 4.1.」以下、LLVM-RL78のリンカ不具合報告です。今気付いたのですけれども。自分が最後に見た時の後でリプライが来てましたね。後で、試してみてうまくいけば、こちらのやり方にします。LLVM-RL78 clang ld.lld's incorrect relocation address problellvm-gcc-renesas.com/question/llvm-rl78-clang-ld-llds-incorrect-relocation-address-problem/以下、e2 studioの画面コピーです。LLVM for Renesas RL78 10.0.0.202301 → アセンブラソース修正後にOK