TinyCLR OS触り始めました(途中で挫折編)
TinyCLR OSが良い感じになってきているようなので、動かしてみました。
TinyCLR OSをダウンロード
TinyCLR OSのReleasesにある、0.4.0 on 2017-05-10をクリックして、TinyCLR.0.4.0.zipをダウンロードします。
中身は、デバイスに入れるブートローダー.binとVisualStudio拡張.vsix、nugetパッケージ.nupkg。.ghiというのがありますが詳細不明。
- G120 Bootloader.2.0.2.ghi
- G120 Firmware.0.4.0.ghi
- G30 Firmware.0.4.0.ghi
- G400 Bootloader.2.0.2.bin
- G400 Firmware.0.4.0.ghi
- G80 Firmware.0.4.0.ghi
- GHIElectronics.TinyCLR.BrainPad.0.4.0.nupkg
- GHIElectronics.TinyCLR.Core.0.4.0.nupkg
- GHIElectronics.TinyCLR.Devices.0.4.0.nupkg
- GHIElectronics.TinyCLR.Drawing.0.4.0.nupkg
- GHIElectronics.TinyCLR.Pins.0.4.0.nupkg
- GHIElectronics.TinyCLR.Storage.0.4.0.nupkg
- GHIElectronics.TinyCLR.VisualStudio.0.4.0.vsix
- License.txt
VisualStudio拡張をインストール
GHIElectronics.TinyCLR.VisualStudio.0.4.0.vsixをダブルクリックしてインストールします。
本PCはVisual Studio 2015もインストールしてありますが、一覧に表示されていないところをみると、Visual Studio 2017専用のようです。
インストールボタンをクリックすればOK。
VisualStudioはどう拡張されたのか
プロジェクト新規作成のテンプレートに、TinyCLRが追加されました。
試しに、TinyCLR Applicationプロジェクトを新規作成してみると、こんな感じ。
GHIElectronics.TinyCLR.Coreを参照しているだけ(笑)。とってもシンプル。
ビルドしてみると一瞬で完了します。そりゃそうですね。
デバイスとの接続を設定できるよう、プロジェクトのプロパティにTinyCLR OSが追加されています。中身はNETMFのソレと同じで、接続方法にUSB,Serial,TCP/IPの選択が表示されました。
で、デバイスは?
VisualStudio側がシンプルなのは十分わかりました。
では、デバイスはどうすれば良いのでしょうか。
既出のTinyCLR.0.4.0.zipに、G30,G80,G120,G400のファームウェアっぽいものが入っています。
- G30 Firmware.0.4.0.ghi
- G80 Firmware.0.4.0.ghi
- G400 Bootloader.2.0.2.bin
- G400 Firmware.0.4.0.ghi
- G120 Bootloader.2.0.2.ghi
- G120 Firmware.0.4.0.ghi
GHI Catalogによると、これらはSTM32,LPC,SAMのようです。
うーむ、どれも持っていない…。
STM32F4 Discoveryが対応しているっぽいので、マルツで買ってきました。(また基板が増えてしまった。)
STM32F407なので、きっとG80 Firmware.ghiを入れるんだろうと思いながらも、拡張子.ghiなのが気がかり。 STM32 Bootloaderの手順に従って、DfuSe USB device firmware upgrade STMicroelectronics extensionをダウンロード、インストールすることに。
と、ここまでやったところで、Tiny CLR OS 0.5.0のダウンロードを発見した。
振出しに戻る。
つづく。
Unity 3Dの.NETバージョンが謎すぎるので調査中
HoloLensの開発にUnityを使っていますが、UWPであるにもかかわらず、nugetが使えなかったり、UWP固有の呼び出しができなかったりして謎すぎるので調べています。
現時点では全てが明確に判明したわけではないです。気づいた点があればコメントいただけると嬉しいです。
使用している環境
- Unity 5.6.1f1
- Visual Studio 2017(15.2)
ビルドと実行環境のタイミング
UnityのScriptのビルドと実行環境は、次のものがあります。
- UnityからScriptの編集
- Unityで実行
- Visual StudioからUnityにプロセスアタッチしてデバッグ
- UnityからBuild
- Build出力のビルドと実行
さらに、Unityからリモート実行とか、HoloLensエミュレータで実行とかあるようですが未確認。
それぞれについて、フレームワークに何が使われているか調べてみました。
UnityからScriptの編集
UnityからScriptをOpenした状態。 プロジェクトフォルダ直下にある.sln, .csprojを開いたVisual Studio。
Unityで実行
Unityで再生マークを押して実行している状態。
Visual StudioからUnityにプロセスアタッチしてデバッグ
UnityからScriptの編集で立ち上がったVisual Studioを実行すると、Unityにプロセスアタッチします。 なので、Visual Studioで実行してから、Unityで実行すると、Unityで実行している状態をVisual Studioでデバッグすることができます。
UnityからBuild
UnityのBuild SettingsでBuildボタンをクリックしてビルドすること。
Build出力のビルドと実行
UnityからBuild時に指定したフォルダに作成された、.slnを開いたVisual Studio。 (Unity C# Projectsをチェックしている場合は編集できたり、)ビルドしてHoloLensにデブロイ、リモート実行すること。
調べ方
(そのうち書く!m(__)m)
結果
状況 | フレームワーク |
---|---|
UnityからScriptの編集 | .NET3.5 / .NET4.6 |
Unityで実行 | mono(.NET2系)っぽい |
Visual StudioからUnityにプロセスアタッチしてデバッグ | mono(.NET2系) |
UnityからBuild | UWP(UAP)っぽい |
Build出力のビルドと実行 | UWP(UAP) |
【メモ】Visual Studio Code + Nucleo-L476RG
Wataraiさんが分かりやすい記事をアップしました。そちらが分かりやすいです。
手順の精査は必要ですが、とりあえず動いたのでメモ。
- OpenOCDを使う。(NucleoはST-LinkなのでpyOCDはダメ)
- OpenOCDはコマンドラインで事前に起動しておく。(VSCodeからのlaunchだと、なぜかVSCodeからGDBサーバーへ接続しようとしない。)
- VSCodeからのGDBサーバー起動は無し。(launch.jsonのdebugServerPathを削除)
OpenOCD起動コマンド
C:\OpenOCD\openocd.exe -s C:\OpenOCD\tcl -f board\st_nucleo_l476rg.cfg -c init -c "reset init"
Windows-Remote-Arduinoをデバッグする
nugetにある、Windows-Remote-Arduinoのソースは、githubで公開されている。
githubから取得したソースがなかなかビルドできなかったので、手順をメモします。
- git clone remote-wiring … recursiveは不要
- git clone serial-wiring
- Visual Studio 2017でUWPアプリを新規作成
- ソリューションに、remote-wiringのMicrosoft.Maker.FirmataとMicrosoft.Maker.RemoteWiringを追加
- ソリューションに、serial-wiringのMicrosoft.Maker.Serialを追加
- UWPアプリから、Serial, Firmata, RemoteWiringを参照設定
remote-wiringからserial-wiringを参照しているパスがsubmoduleのパスではない。 Visual Studio 2017を使わないといけない。ところがポイント。
Visual Studio Codeでmbed OSプログラムをデバッグする方法
Debugging mbed OS applications with Visual Studio Codeをやってみた備忘録です。 github.com
基本的には、この手順通りですが、(現在は)いくつかハマりポイントがあったので、書いておきます。
環境は、
- Surface Pro 4
- Windows 10 Professional 1703
- FRDM-K64F
です。
Nucleo-L476RGをデバッグしたかったのですがpyOCDが対応していない、mbed LPC1768はGCC (ARM Embedded)向けのエクスポートが無い、ことから、FRDM-K64Fを使いました。Nucleoやmbed LPC1768については、機会があれば書きたいと思います。Wataraiさんの、STM32+OpenOCD記事。
ソフトウェアのインストール
Toolchain
C/C++コンパイラ
GNU ARM Embedded Toolchainをインストールします。
わたしの環境は、既に4.9 2015q3をインストールしていたので、特に何もしませんでした。
4.9-2015-q3-update : Series 4.9 : GNU ARM Embedded Toolchain
インストール先はC:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3で、環境変数PATHにC:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\binを追加しています。
makeコマンド
mbedからMakefileが提供されていますが、GNU ARM Embedded Toolchainにmakeコマンドが含まれていないので、追加でインストールします。
GnuWin32に含まれている下記ファイルを、C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\binにコピーします。
コピーするファイル名 | 含まれているzipファイル名 |
---|---|
make.exe | make-3.81-bin.zip |
libiconv2.dll | make-3.81-dep.zip |
libintl3.dll | make-3.81-dep.zip |
Debug toolchain
OCD(On-Chip Debugger)
ボードに合わせて、pyOCDもしくはOpenOCDをインストールします。(OpenOCDは、ビルド作業が必要だったり、設定ファイルを書かなければいけないようです。)
今回のFRDM-K64FはpyOCDが対応していますので、pyOCDをインストールします。
pyOCD
pyOCDは、Python 2.7系をインストールしてから、pipコマンドでインストールします。
> C:\Python27\Scripts\pip install pyocd
Visual Studio Code
Visual Studio Codeをインストールします。
なお、PATHへの追加は不要なので、チェックを外しました。
ソフトウェアの確認
mbed OSプログラム
動かしてみるプログラムを用意します。
mbedオンラインコンパイラでmbed OS Blinky LED HelloWorldを作成して、GCC (ARM Embedded)向けにエクスポート、適当なフォルダに解凍します。
Toolchain
mbed OSプログラムのフォルダでmakeコマンドを実行して、コンパイルできるか確認します。
> make C:/Users/takashi/Desktop/mbed-os-example-blinky/makefile:615: warning: overriding commands for target `.s.o' C:/Users/takashi/Desktop/mbed-os-example-blinky/makefile:610: warning: ignoring old commands for target `.s.o' "Compile: main.cpp" "Compile: AnalogIn.cpp" ... "Compile: rtc_api.c" "Compile: sleep.c" ../mbed-os/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/sleep.c: In function 'hal_deepsleep': ../mbed-os/targets/TARGET_Freescale/TARGET_MCUXpresso_MCUS/api/sleep.c:31:16: warning: unused variable 'mode' [-Wunused-variable] mcg_mode_t mode = CLOCK_GetMode(); ^ "link: mbed-os-example-blinky.elf" 'arm-none-eabi-objcopy' -O binary mbed-os-example-blinky.elf mbed-os-example-blinky.bin "===== bin file ready to flash: BUILD/mbed-os-example-blinky.bin =====" 'arm-none-eabi-objcopy' -O ihex mbed-os-example-blinky.elf mbed-os-example-blinky.hex >
mbed-os-example-blinky.elfが出来上がっていればOKです。
pyOCD
FRDM-K64FをUSB接続しておき、pyocd-gdbserverを起動してGDB serverがスタートするか確認します。
> c:\Python27\Scripts\pyocd-gdbserver.exe INFO:root:DAP SWD MODE initialised INFO:root:K64F not in secure state INFO:root:ROM table #0 @ 0xe00ff000 cidr=b105100d pidr=4000bb4c4 INFO:root:[0]<e000e000:SCS-M4 cidr=b105e00d, pidr=4000bb00c, class=14> WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[1]<e0001000: cidr=0, pidr=0, component invalid> INFO:root:[2]<e0002000:FPB cidr=b105e00d, pidr=4002bb003, class=14> WARNING:root:Invalid coresight component, cidr=0xb1b1b1b1 INFO:root:[3]<e0000000: cidr=b1b1b1b1, pidr=b1b1b1b1b1b1b1b1, component invalid> WARNING:root:Invalid coresight component, cidr=0x0 INFO:root:[4]<e0040000: cidr=0, pidr=0, component invalid> INFO:root:[5]<e0041000:ETM-M4 cidr=b105900d, pidr=4000bb925, class=9, devtype=13, devid=0> INFO:root:[6]<e0042000:ETB cidr=b105900d, pidr=4003bb907, class=9, devtype=21, devid=0> INFO:root:[7]<e0043000:CSTF cidr=b105900d, pidr=4001bb908, class=9, devtype=12, devid=28> INFO:root:CPU core is Cortex-M4 INFO:root:FPU present INFO:root:6 hardware breakpoints, 4 literal comparators INFO:root:4 hardware watchpoints INFO:root:Telnet: server started on port 4444 INFO:root:GDB server started at port:3333
"GDB server started"と表示されていればOKです。
pyOCDはVisual Studio Codeから都度起動されるので、Ctrl+Cで止めておいてください。
Visual Studio Codeでmbed OSプログラムをデバッグ
Makefileの修正
mbedで作成されたMakefileは、オプションが最適化ありになっているので、デバッグできるよう最適化を無効にします。
■変更前
CPP = 'arm-none-eabi-g++' '-std=gnu++98' '-fno-rtti' '-Wvla' '-c' '-Wall' '-Wextra' '-Wno-unused-parameter' '-Wno-missing-field-initializers' '-fmessage-length=0' '-fno-exceptions' '-fno-builtin' '-ffunction-sections' '-fdata-sections' '-funsigned-char' '-MMD' '-fno-delete-null-pointer-checks' '-fomit-frame-pointer' '-Os' '-mcpu=cortex-m4' '-mthumb' '-mfpu=fpv4-sp-d16' '-mfloat-abi=softfp'
■変更後
CPP = 'arm-none-eabi-g++' '-std=gnu++98' '-fno-rtti' '-Wvla' '-c' '-Wall' '-Wextra' '-Wno-unused-parameter' '-Wno-missing-field-initializers' '-fmessage-length=0' '-fno-exceptions' '-fno-builtin' '-ffunction-sections' '-fdata-sections' '-funsigned-char' '-MMD' '-fno-delete-null-pointer-checks' '-fomit-frame-pointer' '-O0' '-ggdb' '-mcpu=cortex-m4' '-mthumb' '-mfpu=fpv4-sp-d16' '-mfloat-abi=softfp'
オプション変更は十分吟味されていません。お気づきの点があればコメントください。
Makefileを修正したので、再度、全てをビルドし直す必要があります。BUILDフォルダを削除しておきましょう。
Visual Studio Codeの構成を設定
mbed OSプログラムのフォルダに、vscode.zipを展開します。
Visual Studio Codeの構成は、.vscode/settings.json, .vscode/tasks.json, .vscode/launch.json ファイル。
mbed handbookには、Visual Studio Code向けにエクスポートすると、構成が正しく設定されているっぽいのですが、現在はVisual Studio Code向けの選択肢が表示されませんでした。
デバッグの開始
Visual Studio Codeで、デバッグの開始を実行します。
プログラムに問題なくても、わりと高い確率でmakeがエラーになります。焦らず、何度もデバッグの開始を実行しましょう。(汗
気分良くビルドしたい場合は、コマンドプロンプトからmakeを実行してください。
最後に
Visual Studio Codeにインクルードパスを指定していないため、せっかくVisual Studio Codeを使っているのにIntelliSenseがきちんと動作していない。Visual Studio Codeに何か設定が必要なのだろう。
mbed handbookに手順書があったのでVisual Studio Codeを使ったが、Mac/Linux使っておらず、普段はVisual Studio Proを使っているので、Visual Studioでコレをできるようにしたい。
参考
Arduino Pro Mini互換機とUSBシリアル変換モジュールの結線
Arduino Pro Mini互換機とUSBシリアル変換モジュールの結線に迷ったのでメモします。
Arduino Pro Mini互換機
AliExpressのこちら。
現物写真。
プログラム書き込み用の端子は、左から、
ピン番号 | 名称 |
---|---|
1 | GND |
2 | GND |
3 | VCC |
4 | RXI |
5 | TXD |
6 | DTR |
となっています。
USBシリアル変換モジュール
AliExpressのこちら。
現物写真。
端子は、左から、
ピン番号 | 名称 |
---|---|
1 | GND |
2 | CTS |
3 | VCC |
4 | TXD |
5 | RXI |
6 | DTR |
となっています。
結線
単純に、順番に結線すればOKでした。
変換ピン番号 | 変換名称 | 配線色 | Arduino互換ピン番号 | Arduino互換名称 |
---|---|---|---|---|
1 | GND | 黒 | 1 | GND |
2 | CTS | (不要) | 2 | CTS |
3 | VCC | 赤 | 3 | VCC |
4 | TXD | 青 | 4 | TXD |
5 | RXI | 黄 | 5 | RXI |
6 | DTR | 白 | 6 | DTR |
おまけ①
ピン番号 | Arduino名称 | ATmega328名称 | Arduino互換名称 |
---|---|---|---|
1 | BLK | GND | GND |
2 | GND | GND | CTS |
3 | VCC | VCC | VCC |
4 | RXI | RXD | TXD |
5 | TXD | TXD | RXI |
6 | GRN | -> RESET# | DTR |
また、公式と互換機は、ピンの並び順が逆なので注意が必要!
おまけ②
Arduino Pro Mini互換機を付け替えしやすいよう、テストプローブを検討していましたが、良さそうなものが手に入らなかったのでスルーホール用テストワイヤを使いました。
どれくらい耐久性あるんだろう。ちょっと心配。
EAGLEにInkscapeの図形を入れる
Inkscapeで描いた図形(ベクターデータ)を、できるだけ劣化が無いようにEAGLEへ入れる方法です。
InkscapeはPOLYLINEやLWPOLYLINE,SPLINE、EAGLEはPOLYGON。 Inkscapeで曲線をどうやってPOLYLINEにするのか?EAGLEでどうやって(WIREではなく)POLYGONに取り込むのか、がポイント。
環境
- Windows 10 Pro 1607 64bit
- Inkscape 0.92
- EAGLE 8.1.0
概要
題材
Inkscapeのテキストツールで「まつじるし」を作成。 フォントはHGMaruGothicMPRO。文字間隔を-10に。大きさは適当。
ベクターデータを確認するために、フィルをグレー、ストロークを青にすると、こんな感じ。
Inkscapeの操作
SVGファイルに保存
以降の操作でやり直しするかもしれません(する場合のが多いかも?)ので、最初にSVGファイルで保存しておきます。
パスに変換、グループを解除
オブジェクトは、全てパスに変換して、グループを解除します。 選択ツール(F1)にして、編集 > すべて選択(Ctrl+A)で全オブジェクトを選択した後に、パス > オブジェクトをパスへと オブジェクト > グループ解除を実行します。
ノードツール(F2)の編集 > すべて選択(Ctrl+A)で、このように全てのノードが表示できればOKです。
図形を拡大
次項で変換する際に、できるだけ多くの直線に変換されるよう、図形を大きくしておきます。
選択ツール(F1)にして、編集 > すべて選択(Ctrl+A)で全オブジェクトを選択した後に、マウスで角をドラッグしてサイズを大きくします。ドラッグするときにCtrlを押すと、縦横比が維持されるので便利です。
中抜け部分を分割
EAGLEのポリゴンのネストは中抜けになりません。
「ま」「る」が中抜けしているので、分割します。
矩形ツール(F4)で、中抜け部分が割れるように矩形を追加します。(下図は、見やすいようにフィル無し、ストローク赤にしています。)
「ま」と矩形の順に、Shiftを押しながら複数選択して、パス > 分割を実行します。すると、左側と右側に分割されます。
「ま」「る」を分割した結果はこちら。
曲線を直線に変換
EAGLEのポリゴンに曲線を含めることができないので、曲線を複数の短い直線に変換しておく必要があります。
選択ツール(F1)にして、編集 > すべて選択(Ctrl+A)で全オブジェクトを選択した後に、エクステンション > パスの変形 > ベジエ曲線の平坦化…を実行します。
表示されたダイアログで、平坦度0.1を入力して、適用をクリックします。
ノードツール(F2)の編集 > すべて選択(Ctrl+A)で、このように曲線部分にノードが増えていればOKです。
図形を縮小
上記「図形を拡大」を参考に、図形を実際のサイズに縮小します。
DXFファイルに保存
DXFファイルで保存します。
表示されたダイアログで、線出力のLWPOLYLINEタイプを使用するをチェックして、OKをクリックします。
EAGLEの操作
DXFファイルを読み込み
EAGLEのBoard Editorで、File > Run ULP…を選択し、import-dxf.ulpを開きます。
import-dxf.ulpは、下記からダウンロードしてください。
表示されたダイアログで、File nameを指定、Scaleを3.779527559055118、Prefer polygon outputをチェックして、OKをクリックします。
Scale = 96 / 25.4
で、Run。
結果
でたぁ~。