NyARToolkit for Processing を Windows で動かしてみた
久しぶりに、NyARToolkit の サンプルプログラムを動かしてみました
Processing3 と Processing4 の両方で動作しましたが、Processing4 の方がトラブルが少なかったので、そちらをメインに紹介していきます

NyARToolkit はマーカーベースのARを手軽に作れるライブラリです
サイト: GitHub - nyatla/NyARToolkit-for-Processing: NyARToolkit for Processing
使用例: nyartoolkit - YouTube
1. 環境(Processing4 の場合)
- Windows 11 Pro: 23H2
- Processing: 4.3
- Processing用ライブラリ
- Video Library for Processing 4: 2.2.2 (GStreamer: 1.20.3)
- NyARToolkit for processing: v3.0.10
- カメラ: ノートPC内蔵カメラ
2. 注意事項
Windowsの場合、Processing.exe を配置するフォルダ、スケッチブックの場所には、日本語を含まないようにします。日本語を含むとライブラリを見つけられず、エラーが発生します
詳細はこちら > Processing Video Library 問題まとめ #processing - Qiita
デフォルトだと、スケッチブックの場所が「ドキュメント」になるため、修正が必要です
メニューの ファイル > 設定 を選択し、スケッチブックの場所を変更します

3. ライブラリのインストール
3-1. Video Library for Processing 4
メニューの スケッチ > ライブラリ > Mange Libraries... を選択
Video Library for Processing 4 を選択して、Install を押下する
※ライブラリをインストールしたら、一度 Processing を終了して、再度起動します

3-2. NyARToolkit for processing
Releases · nyatla/NyARToolkit-for-Processing · GitHub
から、nyar4psg.zip をダウンロード

ファイルを解凍し、スケッチブックの場所/libraries 以下に配置する

4. カメラ入力の確認
Video Library のサンプルを実行して、カメラ画像が表示できるか確認します
メニューより ファイル > サンプル... を選択、Javaサンプルのダイアログから
ライブラリ > Video Library for Processing 4 > Capture > GettingStartedCapture
をダブルクリックして、サンプルを開きます
サンプルを実行して、カメラ画像が表示されたらOKです

5. マーカーの準備
NyARToolkit のライブラリに同梱されているマーカーを印刷しておきます
NyARToolkitを格納した場所/data/pattHiro.pdfというファイルです
※マーカーの周囲には白い部分が必要です。黒い部分ピッタリで切ると、うまく認識できません


6. NyARToolkitのサンプルプログラム実行
Javaサンプルのダイアログから
Contributed Libraries > nyar4psg > simpleLite
のサンプルを開いて実行します。カメラにマーカーを見せると、マーカー上に青い箱が表示されます
これでサンプルプログラムの動作が確認できました

7. Processing 3 の場合
下記の環境で、サンプルプログラムの動作は確認できましたが、いくつか対処が必要でした
7-1.環境
- Windows 11 Pro: 23H2
- Processing: 3.5.4
- Processing用ライブラリ
- Video Library for Processing 3: 2.0 (GStreamer: 1.16.2)
- NyARToolkit for processing: v3.0.6
7-2.注意事項
※いずれも、正確な所は分からないので、推測になります
NyARToolkitのバージョンを v3.0.6 にする
- NyARToolkitの v3.0.10 以降は Java11 でコンパイルされているためか、Processing 3.5.4(Java8が同梱) ではエラーになりました
Processing 3 の場合、Video Library for Processing 3: 2.0 を使用します
カメラの初期化処理を修正
- GettingStartedCapture や simpleLite のサンプルをそのまま実行すると、カメラが見つからず何も表示されません。下記に従い、カメラデバイス一覧の取得を繰り返すコードを追加したら動作しました
Processing Video Library 問題まとめ #processing - Qiita
- GettingStartedCapture や simpleLite のサンプルをそのまま実行すると、カメラが見つからず何も表示されません。下記に従い、カメラデバイス一覧の取得を繰り返すコードを追加したら動作しました
void setup() { size(640, 480); String[] cameras = Capture.list(); //=========== ここから ============== //カメラに接続できるまでカメラデバイス一覧を取得 while (cameras.length == 0) { cameras = Capture.list(); } //=========== ここまで ============== if (cameras == null) { println("Failed to retrieve the list of available cameras, will try the default..."); cam = new Capture(this, 640, 480);
void setup() { size(640,480,P3D); colorMode(RGB, 100); println(MultiMarker.VERSION); //=========== ここから ============== String[] cameras = Capture.list(); //カメラに接続できるまでカメラデバイス一覧を取得 while (cameras.length == 0) { cameras = Capture.list(); } cam = new Capture(this, 640, 480, cameras[0]); //=========== ここまで ============== //=========== コメントアウト ============== //cam=new Capture(this,640,480); nya=new MultiMarker(this,width,height,"../../data/camera_para.dat",NyAR4PsgConfig.CONFIG_PSG); nya.addARMarker("../../data/patt.hiro",80); cam.start();
7-3.実行結果

8. まとめ
- Processing3 と Processing4 で NyARToolkit のサンプルプログラムの動作を確認しました
- 現状だと Processing4 がお勧めです。Processing3 はいくつか対処が必要でした
- どちらの場合でも、フォルダ名に日本語を使わないように注意しましょう
最後に、NyARToolkit のコミット履歴を見たのですが、2023年に更新があって驚きました(初回コミットは2009年)。長期にわたってメンテ頂いている製作者の方に感謝します
9. 参考にした情報
9-1. Processing Video Library 関係
カメラ関係は、色々なトラブルがあるようで、これらの情報は参考になりました
うまく行かない場合の選択肢としては、下記もあるようです
9-2. Java のバージョンに関するトラブル
Processing 3.5.4 と NyARToolkit v3.0.10 の組み合わせでは、下記のエラーがでました
NyARToolkit の v3.0.6 と v3.0.10 の間でコンパイル時のバージョンが変わったようです
- Comparing v3.0.6...v3.0.10 · nyatla/NyARToolkit-for-Processing · GitHub
NyARToolkit.jarをJava11でコンパイルした。
- Comparing v3.0.6...v3.0.10 · nyatla/NyARToolkit-for-Processing · GitHub
e2studioでコマンドラインからスタック情報を出力してみた
はじめに
e2studio V7.7.0 で追加されたスタック解析のヘッドレスアプリケーションを使用し、RXマイコンを対象に、コマンドラインからスタック情報の出力を試してみました1。その結果、スタック情報をCSVファイルとして取得できました
e2studio 7.7.0 Release Note より抜粋

使用環境
- e2studio V7.8.0
- Renesas CCRX v3.05.00
- Windows 11 Pro 22H2
e2studioのスタック解析について
e2studioには、各関数が使用するスタックサイズを表示する機能「スタック解析ビュー2」があります。表示形式は「ツリー構造」と「表形式」の2種類から選択できます
種類 表示 ツリー構造 
表形式 
注意: スタックサイズの合計は、メニューから「呼び出し先/元関数の合計を表示」を選択すると、各関数の横に
(8)のように表示されます

事前準備
1.スタック使用量情報ファイルの出力設定
- ビルド時に、スタック使用量情報ファイル(.sni)を出力するよう設定します
プロジェクトのプロパティを開き、「C/C++ビルド>設定>ツール設定>Linker>その他」を選択し、「スタック使用量情報ファイルを出力する(-stack)」をチェックします

- ビルドして、スタック使用量情報ファイル(.sni)の出力を確認します
補足:ビルド結果(.abs)と同じフォルダに保存されます
2.Headless Buildの準備
以下の手順は「VS Codeで、RXマイコンの e2studio プロジェクトをビルドする 」と同様です
「e2studioのインストールフォルダ/eclipse/e2studio.ini」を同じフォルダにコピーし、「eclipse.ini」という名前に変更します

日本語の文字化けを防ぐため、eclipseの表示言語を英語に変更します
具体的には「elipcse.ini」の先頭に以下の2行を追加します-nl en_US
コマンドラインからスタック情報を出力する
コマンドプロンプトを開きます。スタック使用量情報ファイル(.sni)が保存されているフォルダに移動し、以下のコマンドを実行します
e2studioのインストールフォルダ\eclipse\eclipsec.exe -nosplash -application stackanalysis.application -calculateMaxStackSizeInclude=Callee -ccInput=スタック情報解析ファイル名(*.sni)注意:"スタック使用量情報ファイル名"には実際のファイル名を指定してください
コマンドを実行すると、"スタック使用量情報ファイル名_StackAnalysis.csv"という名前のCSVファイルが出力されます
作業フォルダ>C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash -application stackanalysis.application -calculateMaxStackSizeInclude=Callee -ccInput=test.sni Analyzing... + Output: test_StackAnalysis.csv Analysis completed
CSVファイルの中身は、スタック解析ビューの
表形式データになります

スタック解析のコマンドライン引数
stackanalysis.applicationのコマンドライン引数の説明は下記の通りです
Usage: eclipsec.exe [-nosplash] -application stackanalysis.application [-ccInput=file1[,file2] [,file3] ...] [-userLB=file1[,file2] [,file3] ...] [-calculateMaxStackSizeInclude=[Callee|Caller]] -nosplash: Prevents the splash screen from being shown. -ccInput=file1[,file2] [,file3] ...: Input files of CCRX/CCRL project - SNI file absolute paths -userLB=file1[,file2] [,file3] ...: User library file - CSV files -calculateMaxStackSizeInclude=[Callee|Caller] If the option doesn't exist, don't calculate stack size in tree -calculateMaxStackSizeInclude=Callee: Calculate stack size including callees -calculateMaxStackSizeInclude=Caller: Calculate stack size including callers
主な引数は次の通りです
-ccInput:スタック使用量情報ファイル(.sni)を指定します-calculateMaxStackSizeInclude:スタックサイズの合計を出力するために必須の指定ですCaller指定:呼び出し元関数との合計を表示
上位のノードより、下位の関数にスタックサイズを加算して表示しますCallee指定:呼び出し先関数との合計を表示
末端のノードより、下位の関数中最大のスタックサイズを上位の関数に加算して表示します- オプションを指定しない:スタックサイズの合計を表示しません
Caller指定Callee指定オプションを指定しない _PowerON_Reset_PC ( 4 ) _PowerON_Reset_PC ( 452 ) _PowerON_Reset_PC __INITSCT ( 28 ) __INITSCT ( 24 ) __INITSCT __INIT_IOLIB ( 24 ) __INIT_IOLIB ( 120 ) __INIT_IOLIB _main ( 40 ) _main ( 448 ) _main _printf ( 60 ) _printf ( 412 ) __Printf
まとめ
e2studioで、コマンドラインからスタック情報をCSVファイルとして出力できることを確認しました。GUIでも同様の操作が可能ですが、スタック情報の解析を自動化したい場合には、活用できそうです
e2studio(GCC for RX)で、Unityによる単体テストを試してみた
先日、Renesasのアプリケーションノートに従い「e2studio(GCC for RX)で、CUnitによる単体テストを試してみた」をやりましたが、今回はテストフレームワーク Unity で同じことを試しました。結果、CUnitと同様にテストできました

1. 環境
- Windows 10 Pro: バージョン 21H2、ビルド 19044.2130
- e2studio: 2022-07 (64bit版)
- コンパイラ: GCC for Renesas RX 8.3.0.202202
- Unity: 2.5.2
- テスト環境:RX Simulator
2. テスト対象プロジェクトを作成する
- ファイル > 新規 > Renesas C/C++ Project > Renesas RX より、プロジェクトを新規作成
- テンプレートは
GCC for Renesas RX C/C++ Executable Projectを選択 - この記事では、プロジェクト名を
SampleUnityとしています
- テンプレートは
Select toolchain, device & debug settingsのダイアログで下記に設定し「次へ」を押下Select Coding Assistant Settingsのダイアログで「終了」をクリック
3. Unityの導入 と 準備
- GitHub - ThrowTheSwitch/Unity: Simple Unit Testing for Cから、ソースをダウンロード
Unityの
/srcフォルダにあるunity_internals.h、unity.c、unity.hを、作成したプロジェクトの/srcフォルダにコピー/generateフォルダに下記ファイルをsbrk.cとして作成
詳細理解していませんが、putchar や printf を使う場合、この関数が必須のようでした
// 本コードは、Renesasのアプリケーションノートから変更なし // - putchar や printf を使うには、この sbrk 関数が必要なようだ。関数がない場合、次のエラーが出た // collision in (null): pc ffe83663 heap 00001018 stack 0000015c // - Unityはテスト結果の出力に putchar を使うので、この関数定義は必須 void* sbrk(int incr) { extern char end; /* Set by linker. */ static char * heap_end; char * prev_heap_end; if (heap_end == 0) heap_end = &end; prev_heap_end = heap_end; heap_end += incr; return (void *)prev_heap_end; }
3. テスト対象コードの追加
/srcフォルダにテスト対象ソースsource.h、source.cを追加
// 本コードは、Renesasのアプリケーションノートから変更なし #ifndef SOURCE_H_ #define SOURCE_H_ int add(int a, int b); int subtract(int a, int b); #endif /* SOURCE_H_ */
// 本コードは、Renesasのアプリケーションノートから変更なし #include "source.h" int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; }
4. テストコードの作成
メインのソースコードを下記のように修正
#include <stdlib.h> // _Exit() #include "unity.h" #include "source.h" // RUN_TEST毎の前後で呼ばれる関数(関数定義は必須、中身は空でも良い) void setUp(void) { } void tearDown(void) { } // 下記テストは、Renesasのアプリケーションノートの内容を、Unity用に書き換えたもの static void test_Add_01(void) { TEST_ASSERT_EQUAL_INT(1, add(1,0)); } static void test_Add_02(void) { TEST_ASSERT_EQUAL_INT(10, add(1,9)); } static void test_Subtract(void) { TEST_ASSERT_EQUAL_INT(0, subtract(1,1)); } void main(void) { // テストケースが失敗した数 int num_of_failures; // テスト開始 UNITY_BEGIN(); // 各テストを実施 RUN_TEST(test_Add_01); RUN_TEST(test_Add_02); RUN_TEST(test_Subtract); // テスト終了 num_of_failures = UNITY_END(); // プログラムを強制終了し、シミュレータを抜ける // - このやり方が正しいか分からないが、Renesasのアプリケーションノートの方法(generate/start.Sにbrkを追加)だと、 // プログラム終了してからコマンドプロンプトに戻るまでに時間が掛かるので、このようにしている _Exit( (num_of_failures == 0) ? EXIT_SUCCESS : EXIT_FAILURE ); }
- ポイント
- テストコード
test_Add_01()などを記述
※アプリケーションノートだとテストは別ファイルtestsource.cでしたが、ここでは簡単のためテストを同一ファイルに記述してます - テスト実行コードを main() 内に記述
- テスト完了後、_Exit() でプログラムを強制終了し、シミュレータを抜ける
※このやり方が正しいか分からないですが、アプリケーションノートの方法(generate/start.Sにbrkを追加)だと、コマンドプロンプトに戻るまでに時間が掛かるので、このようにしてます
- テストコード
5. テスト用のバッチファイル作成
/Debugフォルダに下記ファイルをrun_test.batとして作成、ビルド後のフェーズでテストを実行する
@echo off REM シミュレータでテストを実行する REM ★GCC for RX のバージョン・インストール先に合わせて rx-elf-run.exe のパスを変更 REM ★プロジェクトの設定に合わせて *.elf のファイル名を変更 echo ******************** test phase ******************** "C:\ProgramData\GCC for Renesas RX 8.3.0.202202-GNURX-ELF\rx-elf\rx-elf\bin\rx-elf-run.exe" SampleUnity.elf echo ****************************************************
6. 確認
この手順まで進めると、下記のフォルダ構成になります(水色が追加・修正したファイル)

7. プロジェクトのプロパティ設定
プロジェクトのプロパティを開いて、下記を設定
8. Unityを使用した単体テストを実行する
プロジェクトをビルドすると、ビルドに続いて、テストが実行される
※先日の記事と同様、設定すればVS Code上でも実行可能です

参考にした情報
e2studio(GCC for RX)で、CUnitによる単体テストを試してみた
Renesasのアプリケーションノート「e2studioでのCUnitの使用方法(GCC for RX)(R02AN0525JJ0102)」で紹介されていた内容を、そのまま試してみました
基本的に、資料の通りに進めれば良いのですが、いくつか引っ掛かった箇所があったので記載しておきます。おまけとして、①ビルド後に自動的にテスト実行、②VS Code上で実行を試してます

1. 環境
- Windows 10 Pro: バージョン 21H2、ビルド 19044.2130
- e2studio: 2022-07 (64bit版)
- CUnit: 2.1.2
- コンパイラ: GCC for Renesas RX 8.3.0.202202
- Visual Studio Code: 1.72.2
2. 前提条件
32bit版のe2stuido(V7.8.0)では、うまく行きません。指示通り 64bit版(20xx-xx) を使った方が良いです
V7.8.0でテスト対象プロジェクトをビルドすると、rx-elf-libgenに--header-files=allというオプションが指定され、これが解釈できずエラーになりました

3. 「2.2 CUnitライブラリを作成する」について
ライブラリ側のビルド時にいくつか警告が発生します。おそらく、スタック使用量の警告で問題ないと思います

最後の警告(無効なプロジェクト・パス~)は、C/C++一般>パスおよびシンボル>ソース・ロケーションから、/CUnit/generateを削除すれば消えます

4. 「3.1 テスト対象プロジェクトを作成する」について
アプリケーションノートのpdfファイルから、ソースコードをコピペするとprintf内の改行指示がおかしくなり、テストの出力が文字化けします。ここは手入力した方がよいです
上がコピペした状態、下が正しい状態です

コピペした状態でテストすると、テストの出力が文字化けします

5. 「3.2 CUnit を使用した単体テストを実行する」について
[Show in Local Terminal]>[Terminal]でターミナルを起動するのですが、このメニューは、e2studioインストール時に拡張機能Terminalsを選択してないと表示されません

表示されない場合は、コマンドプロンプトで代用可能です

6. よく分からないこと
以上で、アプリケーションノートの内容は再現できました

ただ、テスト完了後に(Tests completed with return value 0. が表示されてから、プロンプトが表示されるまでに)、10秒くらい間が空きます。これが正しい動作かよく分かりません。テストNG時はエラーメッセージ(Read from unwritten memory at 0xa000001c)が出て、すぐプロンプトに戻るのですが・・・

とりあえずの対策
_Exit() や abort() で強制的にプログラムを終了すると、すぐにコマンドプロンプトに戻るようになりました。exit() では効果がなかったので、両者の違いである atexit()ハンドラ が影響しているのかも知れません

7. おまけ①: ビルド後に自動的にテスト実行する
折角なので、ビルドしたら自動的にテストを実行するようにしてみます。これは、ビルド後のステップで、テストを起動するだけで出来ます
SampleCUnit/Debugフォルダに、下記ファイルをrun_test.batとして配置
@echo off REM シミュレータでテストを実行する REM ★GCC for RX のバージョン・インストール先に合わせて rx-elf-run.exe のパスを変更 REM ★プロジェクトの設定に合わせて *.elf のファイル名を変更 echo ******************** test phase ******************** "C:\ProgramData\GCC for Renesas RX 8.3.0.202202-GNURX-ELF\rx-elf\rx-elf\bin\rx-elf-run.exe" SampleCUnit.elf echo ****************************************************
C/C++ビルド>設定>ビルド・ステップにて、ビルド後のステップに
run_test.batを入力
ビルドを実行すると、続けてテストが実行される

8. おまけ②: VS Code上で実行する
「VS Codeで、RXマイコンの e2studio プロジェクトをビルドする」の記事に従い、ビルドタスクを設定すれば、VS Code上でも「おまけ①」と同様にテストを実行できます

参考までに tasks.json の設定は下記です。★の部分は環境に合わせて調整必要
{ "version": "2.0.0", "tasks": [ { "label": "e2studioプロジェクトのビルド", "type": "shell", // ★eclipsec.exe もしくは e2studioc.exe のフルパスを指定 // e2studioのインストールフォルダ/eclipse/ にあるはず "command": "C:/Renesas/e2_studio_2022-07/eclipse/e2studioc.exe", "args": [ "-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.cdt.managedbuilder.core.headlessbuild", "-data", // ★e2studioのワークスペースフォルダを指定 "C:/User/e2studio_2022-07", // ★build or cleanBuild を指定 "-build", // ★ビルド対象のプロジェクト/ビルド構成を指定 "SampleCUnit/Debug" ], "group": "build", "presentation": { "reveal": "always", // Terminal パネルを必ず開く "clear": true // 実行前に Terminal をクリア }, "problemMatcher": [] } ] }
9. 最後に
以上で、VS Code上でRXマイコンの単体テストを実施できるようになりました
以前、e2studio上でシミュレータを起動して単体テストをしたのですが、テストがe2studio上に制約されるのは不便に感じました。今回の方法だと、テストがCUIで完結するため、便利になりそうです
今回、Renesasの単体テストに関するアプリケーションノートを参照しましたが、最近、Renesasから継続的インテグレーション関係のアプリケーションノートが多数発行されてます。特定マイコンに対して、具体的な手順が記載された資料は少ないので、ありがたいです。他の内容も試したいと思ってます
参考にした情報
- ERR04-C. プログラムの適切な終了方法を選択する
- exit()、_Exit()、abort() の動作の違いについての説明が参考になりました
VS Codeで、RXマイコンの e2studio プロジェクトをビルドする
VS CodeでRXマイコンのプロジェクトをビルドする方法はいくつかのサイトで紹介されています。それらは統合開発環境 CS+ での事例だったので、もう1つの環境 e2studio で試してみました
結果、eclipseのHeadless Buildを使うことでビルドできました。ただし、日本語メッセージの文字化けについては、英語表示に切り替えて回避してます
- 2022/10:64bit版の情報を補足しました
e2studioには 32bit版(V7.8.0) と 64bit版(2022-10) がありますが、64bit版の途中でコマンドライン用の実行ファイルが変わった為、異なる点を追記しました。説明の都合上、eclipsec.exeのケースを32bit版、e2studioc.exeのケースを64bit版と呼びます - 2022/11:ビルド時のエラーを出力する設定を追加しました
1. 環境
- Windows 10 Pro
- Visual Studio Code: 1.59.0
- PowerShell: 5.1.19041.1151
- 統合開発環境: e2studio V7.8.0 (32bit版)
- コンパイラ: Renesas CC-RX v03.03.00
2. 手順の概略
3. コマンドラインでビルド出来るようにする
Renesasの「FAQ 3000149 : e² studioのプロジェクトをコマンドラインでビルドするには?」に従って作業します
e2studioのインストールフォルダ/eclipse/e2studio.ini ファイルを同じフォルダにコピーし、ファイル名をeclipse.iniに変更する
64bit版の場合はe2studioc.iniに変更する ※ここは公式情報ではないので間違っているかも132bit版 64bit版 

準備としてはこれだけ。あとは、コマンドプロンプトで下記を実行すれば良いです
e2studioのインストールフォルダ\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "e2studioのワークスペースフォルダ" -cleanBuildプロジェクト名(/ビルド構成)- 補足
ビルド構成は設定しなくてもよい。設定しない場合は、全ての構成が対象になる- -cleanBuild を指定するとクリーンアップとビルド、-build を指定するとビルドのみになる
具体例として、私の環境だと
C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug
64bit版の場合
C:\Renesas\e2_studio\eclipse\e2studioc.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug
という感じになります。なお、私の環境・ワークスペース構成は下記です
e2studioのインストールフォルダ= C:\Renesas\e2_studioe2studioのワークスペースフォルダ= C:\User\e2studioプロジェクト名= rx231_cast_testビルド構成= Debug
コマンドを実行すると、クリーンアップおよびビルドが走ります。実行結果は下記の通り
ビルドは完了しますが、一部の日本語メッセージが文字化けします
C:\Renesas\e2_studio\eclipse\eclipsec.exe -nosplash --launcher.suppressErrors -application org.eclipse.cdt.managedbuilder.core.headlessbuild -data "C:\User\e2studio" -cleanBuild rx231_cast_test/Debug 23:39:13 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繧ッ繝ェ繝シ繝ウ縺ョ縺ソ縺ョ繝薙Ν繝・**** make -j4 clean rm -rf *.sni *.dbg *.lst *.lis *.lpp *.map *.x *.lbp *.bls *.libelf *.rel *.lbk *.abs *.mi *.jmp *.fsy 1st/*.abs 1st/*.jmp 1st/*.fsy rx231_cast_test.abs rx231_cast_test.lib ・・・ ECHO は <OFF> です。 'Clean complete.' 23:39:13 Build Finished. 0 errors, 0 warnings. (took 497ms) 23:39:15 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繝薙Ν繝・**** make -j4 all 'Scanning and building file: ../src/smc_gen/r_bsp/mcu/all/r_bsp_common.c' ・・・ Converting the DWARF information.... Constructing the output ELF image.... Saving the ELF output file rx231_cast_test.x 'Build complete.' 23:39:24 Build Finished. 0 errors, 8 warnings. (took 9s.441ms) ワークスペースを保管しています。
4. 日本語メッセージの文字化けに対処する
eclipseの表示言語を英語に切り替えて対処します。elipcse.iniの先頭に下記2行を追加する
64bit版の場合はe2studioc.iniに追加する
-nl en_US

これにより、ビルド時のメッセージが英語に変わり、文字化けを回避できます
-- 変更前 -- 23:43:13 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繧ッ繝ェ繝シ繝ウ縺ョ縺ソ縺ョ繝薙Ν繝・**** make -j4 clean ・・・ 23:43:16 **** 繝励Ο繧ク繧ァ繧ッ繝・rx231_cast_test 縺ォ蟇セ縺吶k讒区・ Debug 縺ョ 繝薙Ν繝・**** make -j4 all -- 変更後 -- 23:45:02 **** Clean-only build of configuration Debug for project rx231_cast_test **** make -j4 clean ・・・ 23:45:05 **** Build of configuration Debug for project rx231_cast_test **** make -j4 all
日本語で対処する方法も色々探したのですが、どれもうまく行きませんでした
例えば elipces.ini に-Dfile.encoding=MS932を追加するとか。結局、英語にするのが一番簡単でした
5. VS Codeのビルドタスクを作る
ビルドが出来るようになったので、VS Code 上でビルドタスクを設定します
/.vscode/tasks.jsonファイルがない状態で「ターミナル>タスクの構成」を選択
- 「テンプレートから tasks.json を生成」、「MSBuild ビルド ターゲットを実行」の順に選択


/.vscode/tasks.jsonファイルが生成される
生成されたファイルの中身を下記のように修正。★の部分は環境に合わせて調整必要
{ "version": "2.0.0", "tasks": [ { "label": "e2studioプロジェクトのクリーンビルド", "type": "shell", // ★eclipsec.exe もしくは e2studioc.exe のフルパスを指定 // [e2studioのインストールフォルダ]/eclipse/ にあるはず "command": "C:/Renesas/e2_studio/eclipse/eclipsec.exe", // "command": "C:/Renesas/e2_studio/eclipse/e2studioc.exe", "args": [ "-nosplash", "--launcher.suppressErrors", "-application", "org.eclipse.cdt.managedbuilder.core.headlessbuild", "-data", // ★e2studioのワークスペースフォルダを指定 "C:/User/e2studio", // ★build or cleanBuild を指定 "-cleanBuild", // ★ビルド対象のプロジェクト/ビルド構成を指定 "rx231_cast_test/Debug" ], "group": "build", "presentation": { "reveal": "always", // Terminal パネルを必ず開く "clear": true // 実行前に Terminal をクリア }, "problemMatcher": [] } ] }
以上で設定は完了です
6. ビルドタスクを実行してみる
「ターミナル>タスクの実行...」よりタスク「e2studioプロジェクトのクリーンビルド」を実行します。起動に少し時間が掛かりますが、クリーンアップ・ビルドが順次実行されて、ビルド完了します


補足
ビルド時のメッセージが増えてくると、最初の方のメッセージが流れてしまって見えなくなります。「ファイル>ユーザ設定>設定」よりterminal.integrated.scrollbackを検索し、ターミナルの最大行数を調整してください。私は5000行に設定しました

7. ビルド時のエラーを「問題」に出力
tasks.json の problemMatcherの部分を修正すると、ビルド時のコンパイルエラーを「問題」のタブに出力できます。但し、リンカ関係のエラー表示は完全ではないです(下図の E0562310, W0561017 のようにファイル名としてエラーコードが表示される)。この設定は かふぇルネ(Renesas Engineering Community) の投稿を参考に作りました

"problemMatcher": [ { // コンパイラのエラーを検出 "owner": "ccrx", "fileLocation": [ // ★ビルド対象のビルドロケーション(makefileが出来る場所)を指定 // ${workspaceFolder}/ビルド構成 になるはず "relative", "${workspaceFolder}/HardwareDebug" ], "severity": "error", "pattern": { "regexp": "^(.*)\\((\\d+)\\):([CEF]\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4 } }, { // コンパイラのワーニングを検出 "owner": "ccrx", "fileLocation": [ // ★同上 "relative", "${workspaceFolder}/HardwareDebug" ], "severity": "warning", "pattern": { "regexp": "^(.*)\\((\\d+)\\):(W\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4 } }, { // コンパイラのインフォメーションを検出 "owner": "ccrx", "fileLocation": [ // ★同上 "relative", "${workspaceFolder}/HardwareDebug" ], "severity": "info", "pattern": { "regexp": "^(.*)\\((\\d+)\\):(M\\d+):(.*)$", "file": 1, "line": 2, "code": 3, "message": 4 } }, { // リンカなどのエラーを検出 // ※ファイルを特定できないため"file"にエラーコードを指定、ファイル名としてエラーコードが表示されます // ※簡単にするため、エラー/ワーニング/インフォメーションを区別してません "owner": "ccrx", "pattern": { "regexp": "^([CEFWM]\\d+):(.*)$", "file":1, "code": 1, "message": 2 } } ]
なお、エラーメッセージのフォーマットは CC-RX ユーザーズマニュアル(R20UT3248JJ0111) の 10.2 出力形式 に記載されています。e2studio のエラーパーサー設定も参考になります
- ファイル名 (行番号): メッセージ種別(CEFMW) コンポーネント番号(05) メッセージ番号 : メッセージ
- メッセージ種別(CEFMW) コンポーネント番号(05) メッセージ番号 : メッセージ
8. まとめ
e2studioのプロジェクトが VS Code でビルド出来るようになりました。今なら e2studio 2020-04以降でサポートされた CMakeプロジェクトを使った方が筋が良い気がしますが、既存プロジェクトをそのまま VS Code でビルドできるのは便利です
参考にした情報
かふぇルネ(Renesas Engineering Community) の投稿
- NoMaYさん - 最近Atom IDEとかVisual Studio Codeとか新しい開発環境が出て来てますね(Renesas CSplusと連携させる方法を探したいですね)
VS Code と e2studio の連携に関し、一番詳細に取り組まれてます。まず、最初に参照する良いです
- NoMaYさん - 最近Atom IDEとかVisual Studio Codeとか新しい開発環境が出て来てますね(Renesas CSplusと連携させる方法を探したいですね)
統合開発環境 CS+ でのビルド事例
- とうふ荘の手記てき! - ルネサスのマイコンをVSCodeを使ってプログラム、そしてCS+でビルド、Flash Programmerで書き込みを行う。
- RT Mobility Robot Blog - VSCodeを使ったRXマイコン開発環境の紹介 – d-satoのマイクロマウス研修 Part8
EclipseのHeadless Build
- Knowledge Base | Renesas Customer Hub - FAQ 3000149 : e² studioのプロジェクトをコマンドラインでビルドするには?
- memoメモ - JenkinsでEclipse CDT (C++) プロジェクトをビルドする
- Qiita(@oyan29さん) - コマンドラインでEclipse
- GNU MCU Eclipse - Scriptable builds from the command line
Eclipseの表示言語を英語にする
- GWT Center - Eclipse:完全に英語モードにする方法
- stack overflow - how to change the display language in eclipse
VS Code のビルドタスク設定、ターミナルの最大行数の調整
VS Code の problemMatcher
- problemMatcher 説明
- VS Code - Defining a problem matcher
- VS Code - Schema for tasks.json
- Michael Heapさん - Getting started with Problem Matchers
- けーちゃんのプログラム開発ノート -【VSCode】タスクの問題マッチャ―(problemMatcher)を理解してみる
- 重大度(severity)毎にproblemMatcherを設定する
- stack overflow - VSCode problemMatcher severity mapping
- Hiroaki Nagashimaさん- TOPPERSの開発も出来ちゃうVSCodeのビルド&デバッグ使いこなし術
p35あたりから、RXのコンパイラエラー出力について言及有り
- problemMatcher 説明
-
試した限りでは 、64bit版の場合は
eclipse.iniではなく、e2studioc.iniが参照されるようです。また、e2studioc.iniがない場合は、e2studio.iniが参照される感じでした。ただ、RenesasのFAQとは一致していないので、この理解は間違っているかもしれません↩
PowerShellで、クリップボードのURLをHtml形式のリンクに変換する
下記のように、URLをHtml形式のリンクに変換します(文字列のHERE!はスクリプトで固定)

URLをチャットやメールなどに貼り付ける時、URLそのままだと長いので、短くすることが目的です。
適当なソフトが見つからなかったので、PowerShellで作ってみました。
1. 使い方
- 下記のバッチファイルとPowerShellスクリプトを同一フォルダに配置
- URLをクリップボードにコピー
- convert_URL_to_html_format_link.bat を実行
- ここでクリップボードのURLが、Html形式のリンクに置き換わる
- 貼り付けたいアプリケーションでペースト
2. バッチファイルとPowerShellスクリプト
ファイルは>こちら
powershell -v 5 -NoProfile -ExecutionPolicy Unrestricted .\convert_URL_to_html_format_link.ps1
# クリップボードにURLが格納されていたら、それをHTML形式のリンクに変換する # ・実行時は PowerShell v 5 を指定のこと。Set-Clipboard の -AsHtml パラメーターが v5 でしか使えない # ・生成するリンクが英語なのは、日本語の文字化け問題を解消できなかったから # PowerShellのバージョンが不適切なら抜ける if ( (Get-Host).Version.Major -ne 5 ) { Write-Host "This script requires powershell V5." exit } # クリップボード内容をテキスト形式で取得 $clipboard_text = Get-Clipboard -Format Text # httpから始まる文字列ならURLと判断 if ( $clipboard_text -like "http*" ) { # HTMLタグでURLへのリンクを作り、Html形式でクリップボードに設定 $html_link = "<a href=""" + $clipboard_text + """><b><i>HERE!</i></b></a>" Set-Clipboard -AsHtml $html_link # 生成内容をコンソールに出力 Write-Host "Created Link:" $html_link }
3. スクリプトの説明
クリップボードにURLリンクを設定する方法として、Set-Clipboardの-asHtmlパラメーターを使いました(参照:Set-Clipboard)。
下記のように文字列($html_link)を渡すと、HTML形式でクリップボードに格納してくれます。
今回はa hrefタグで作ったURLのリンクを渡してます。
PS C:\> $html_link = "<a href=""https://www.google.com/"">Google</a>" PS C:\> Set-Clipboard -AsHtml $html_link
残念ながら、このパラメーターは PowerShell 7 では削除されているようで、Windows PowerShell 5 のみで実行可能です。また、html内に日本語を含むケースの文字化けを解決できなかったので、英語のみで使ってます。
参考にした情報
- Microsoft(PowerShell) - Set-Clipboard
- -asHtml パラメーターが今回の目的にちょうど良く、見つけられてラッキーでした
- オフィスデイタイム - クリップ見え窓 - クリップボード/D&Dデータ内容表示ツール
- クリップボードの仕組み・状態を理解するのに、とても助けになりました
- GitHub(PowerShell Team) - Set-Clipboard -AsHtml puts invalid CF_HTML on clipboard with non-ASCII text #3177
- 日本語を含むHtmlが文字化けするのは、このせいだろうか?
- Qiita(@cd01さん) - バッチファイルから PowerShell を呼び出す方法
Developer Command Prompt for VS 2019 から VS Code を起動する
VS Code で Microsoft Visual C++ を使って開発する方法として、開発者用コンソール(Developer Command Prompt for VS 2019など)から VS Code を起動する手順が紹介されていたのですが(こちら)、入力が面倒なのでバッチファイルを作りました。
REM Developer Command Promptを起動し、完了まで待つ call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat" REM 開くフォルダ指定してVS Codeを起動。VS Codeの終了を待たずに次に進む(start利用) start "" "C:\Program Files\Microsoft VS Code\Code.exe" "D:\User\c" REM バッファファイル終了 exit /b 0
1. 環境
- Windows 10 Pro: 20H2
- Visual Studio Build Tools 2019: 16.9.6
- Visual Studio Code: 1.52.2
2. 環境依存の項目
C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat- Developer Command Prompt for VS 2019 起動時のバッチファイルを指定
- スタートメニューからショートカット実体を探し、プロパティのリンク先から確認


%comspec% /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\VsDevCmd.bat"となるが、%comspec% /kの部分は不要1
C:\Program Files\Microsoft VS Code\Code.exe- VS Code をフルパスで指定
- 上記と同様に、スタートメニューからVisual Studio Code のショートカット実体を探して確認

D:\User\c- VS Code で開きたいフォルダを指定
3. バッチファイルの説明
Developer Command Prompt 用バッチファイルを実行した 「後」 にVS Codeを実行。「VS Codeの終了を待たずに先に進み」バッチファイルを終了させたい。このため、下記手順を踏んでます
callを使って、バッチファイルを実行し、完了を待つstartを使って、新しいプロセスで VS Code を起動し、先に進む- バッチファイルを終了して、閉じる
参考にした情報
- VS Code で Microsoft Visual C++ を使う
- 無料でゲームをつくりたい - WindowsにC++開発環境を構築する(VSCode + MSVC)
- code.visualstudio.com - Configure VS Code for Microsoft C++
- バッチファイル
- タカフミブログ - startとcallの違い【バッチファイル】
-
コマンドプロンプトを開き、指定のバッチファイルを実行、そのままコマンドプロンプトを継続するという記述なので(参考: COMSPEC環境変数 - DOS コマンド一覧 - Programming Field)↩





