こんにちは。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、となっています。)
シミュレータデバッガコンソール出力
シリアルコンソール出力
シリアルコンソール入力
シリアルコンソール入力確認
UART出力
UART入力
UART入力確認
GitHubのリポジトリ
github.com/NoMaY-jp/RL78_SmartConfigurator_examples_RL78FPB_LLVMRL78/tree/cafe_rene
かふぇルネのスレッド
japan.renesasrulz.com/cafe_rene/f/002-2095199602/7430/rl78-fast-prototyping-board-llvmrl78-cplusplus-sample-program
シリアルコンソールのサンプルプログラムはボード上の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#38050
japan.renesasrulz.com/cafe_rene/f/forum18/7087/rl78-g23-fast-prototyping-board/39403#39403
以下、サンプルプログラムの内容です。
シミュレータデバッガコンソール出力
00_SimDebuggerConsole_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); */
}
実行例:

シリアルコンソール出力
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); */
}
実行例:

シリアルコンソール入力
20_SerialConsole_getchar/
void main_task(void *pvParameters)
{
INTERNAL_NOT_USED(pvParameters);
char c;
getchar();
for (;;)
{
printf( "Please enter a character:\r\n" );
c = getchar();
printf( "\r\nNow %c is entered.\r\n\r\n", c );
}
/* vTaskDelete(NULL); */
}
実行例:

シリアルコンソール入力確認
21_SerialConsole_getchar_ready/
void main_task(void *pvParameters)
{
INTERNAL_NOT_USED(pvParameters);
char c;
int i;
for (;;)
{
printf( "Please enter a character:\r\n" );
for (i = 0; i < 3; i++)
{
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
if (is_getchar_ready())
{
c = getchar();
printf( "\r\nYeah, %c is entered.\r\n\r\n", c );
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
break;
}
}
}
/* vTaskDelete(NULL); */
}
実行例:

UART出力
30_UART_Printf/
U_CONFIG_UART_PRINTF_IMPL( UART1, 128 /* transmit buffer size */ );
void main_task(void *pvParameters)
{
INTERNAL_NOT_USED(pvParameters);
LED0 = LED_ON;
for (;;)
{
Printf( UART1, "Hello World\r\n" );
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
LED0 = ~LED0;
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
LED0 = ~LED0;
}
/* vTaskDelete(NULL); */
}
実行例: (9600bpsです。)


UART入力
40_UART_Getchar/
U_CONFIG_UART_PRINTF_IMPL( UART1, 128 /* transmit buffer size */ );
U_CONFIG_UART_GETCHAR_IMPL( UART1, 128 /* receive ring buffer size */ );
void main_task(void *pvParameters)
{
INTERNAL_NOT_USED(pvParameters);
char c;
for (;;)
{
Printf( UART1, "Please enter a character:\r\n" );
c = Getchar( UART1 );
Printf( UART1, "\r\nNow %c is entered.\r\n\r\n", c );
}
/* vTaskDelete(NULL); */
}
実行例: (9600bpsです。)


UART入力確認
41_UART_Getchar_Ready/
U_CONFIG_UART_PRINTF_IMPL( UART1, 128 /* transmit buffer size */ );
U_CONFIG_UART_GETCHAR_IMPL( UART1, 128 /* receive ring buffer size */ );
void main_task(void *pvParameters)
{
INTERNAL_NOT_USED(pvParameters);
char c;
int i;
for (;;)
{
Printf( UART1, "Please enter a character:\r\n" );
for (i = 0; i < 3; i++)
{
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
if (Is_Getchar_Ready( UART1 ))
{
c = Getchar( UART1 );
Printf( UART1, "\r\nYeah, %c is entered.\r\n\r\n", c );
vTaskDelay( pdMS_TO_TICKS( 1000 ) );
break;
}
}
}
/* vTaskDelete(NULL); */
}
実行例: (9600bpsです。)

