QLOOKアクセス解析

2016年08月21日

ARMの開発環境「MDK」と「μVision」でmbedのデバッグを試してみた

夏休みもそろそろ終わりですが、最後にARMの開発ツール「MDK」とそのデバッガ「μVision」を試してみました。

ARM(が買収したKeil)はμVisionとコンパイラやライブラリその他もろもろのツールを合わせて「MDK Microcontroller Development Kit」として提供しているようです。
mbedのクラウド上で作成したコードも、MDK用にエクスポートすれば、ローカルでデバッグすることができます。

このとき、ボードがデバッグ用のインタフェース「CMSIS-DAP」をサポートしていれば、ボード上でコードを実行しながらステップ実行やトレースなどの操作を行うことができます。
幸い、私のボード「mbed LPC1768」はCMSIS-DAP対応のファームウェアが提供されていましたので、このデバッグ機能を試用してみました。

既に先人のレポートがネット上にありましたので、それを参照しつつ進めました。
参考にしたのは以下の2つです。

μVision4でデバッグ! | mbed
mbed LPC1768をMDK-ARMでデバッグ - Qiita

1つ目の記事はやや古く、2012年9月の日付です。文中ではμVisionのバージョンが4になっていますが、現在はバージョン5が提供されています。
2つめの記事は2016年1月のもので、1つ目の記事を参照しています。バージョン5を使う場合のはまりどころが記載されており助かりました。


やることは、大まかに言えば

MDKのダウンロード&インストール
MDK v4 Legacy Support for Cortex-M Devicesのダウンロード&インストール
mbed LPC1768のファームウェアをアップデート

が準備で、そのあと

・mbed用に書いたコードをローカル環境へエクスポート
・MDKのデバッガの設定
・コンパイルして実行

という流れになります。


準備のところは飛ばします。ダウンロードしてインストールするだけですので・・・
なお、MDKをダウンロードするとARMからMDKの日本語スタートアップガイドへのリンクが送られてきますので、メールアドレスはきちんと入力しましょう。


インストールができたら、まずはmbedのファイルをローカルへエクスポートします。
対象はとりあえず先日動作確認したLチカにしました。

右クリックメニューから、プログラムのエクスポートを選びます。

uvision01.png


ボードと開発環境の選択が出ます。
開発環境としてKeil uVision4を選んでおきます。
(後述しますが実際にはUVision5でも大丈夫なようです。)

uvision02.png


ダウンロードしたZIPファイルを展開すると、こんな感じになっています。

uvision03.png


.uvprojファイルをダブルクリックするとMDKが立ち上がります。

MDK v4 Legacy Support for Cortex-M Devicesをインストールしていないと、下図のようなダイアログが出ますのでインストールしましょう。

uvision04.png


プロジェクトを開いた画面はこのようになっています。
普通のIDEですね。

uvision05.png


まず、「Options for target...」をクリックします。

uvision06.png


そして、Debugタブの「Settings...」ボタンからデバッガの詳細設定に入ります。

uvision06b.png


詳細設定画面で、アダプタを「MBED CMSIS-DAP」に指定します。
また、Debugの設定で「HW RESET」を選び、「Stop after bootloader」をオンにします。

uvision10.png


これで準備完了です。
プロジェクトのリビルドボタンを押してビルドします。

uvision07.png


プロジェクトフォルダの中に.binファイルができますので、これをmbedデバイスのフォルダへコピーします。

デバッグは、ドコモのロゴを思い出させる虫眼鏡のアイコンをクリックします。

uvision08.png


ここで、上で説明した「Stop after bootloader」をオンにしていないと、「The CoreSight debug unit in the target device does not react.」とエラーが出てデバッグが終了してしまいます。
私の環境だけかもしれませんが・・・。

uvision09.png


デバッガが起動すればこんな画面が出てきます。
1行ずつのステップ実行などもできます。

uvision11.png


とりあえず動作までは確認できました。
無償版ではオブジェクトサイズが32KBまでという制限があるので、あまり大きなものは作れませんが、趣味で使うなら十分な気がします。


以下オマケです。

mbedからのエクスポートの際、UVision5も選択することができますので、やってみました。

uvision13.png


プロジェクトファイルを開くと、「LPC1700のパッケージが必要」とメッセージが出るので、インストールします。

uvision12.png


あとは基本的に同じです。
デバッガの設定も忘れずに行います。
posted by boochow at 18:42| Comment(0) | mbed | このブログの読者になる | 更新情報をチェックする

2016年08月20日

Arduboyのシミュレータを試してみた

Arduboyのコミュニティサイトを見ていたら、Arduboy用のスケッチをVisual Studioでコンパイルして動作させるシミュレータがあったので試してみました。

Proton Arduboy Simulator (for Windows Visual C++ 2005) - Arduboy / Development - Community

Protonというクロスプラットホームのゲーム開発プラットホームを開発されている方が作られたようです。
エミュレーションではなくシミュレータなので、ArduboyのライブラリのAPIと互換のライブラリをWindows上に作成し、Arduboy用に書かれたスケッチファイルをコンパイルしてWindows用のアプリを生成します。


Proton Arduboy SimulatorをダウンロードするにはSVNクライアントが必要です。
以下の説明にあるように「TortoiseSVN」をインストールし、ダウンロード先のフォルダで右クリックから「TortoiseSVN」→「Import...」を選択します。
するとリポジトリのURLを入力するウインドウが出るので、下記のリンク先にあるとおり「svn://〜」のURLを入力します。

proton:download [RTsoft Wiki]

arduboysym00.png

ファイルにはArduboyのサンプルにあるブロック崩しが最初から含まれています。
プロジェクトファイルは「ArduboySim\windows」の中にあります。
Visual Studio 2015 Communityで問題なく実行できました。

arduboysym01.png


次に、自分で作ったブロック崩しを動作させてみました。
設定の仕方は以下のページに書かれています。

proton:arduboysim [RTsoft Wiki]

スケッチファイルは「ArduboySim\Arduboy」フォルダの中に、「ardu_main.cpp」というファイル名で入れます。
そして、スケッチファイルの「setup()」と「loop()」をそれぞれ「setup_main()」「loop_main()」という名前に変更します。

次に、Visual Studioでプロジェクトファイルを開き、プロジェクトエクスプローラで「ardu_main.cpp」ファイルを探します。
そして、右クリックで「プロパティ」を選択します。

arduboysym03.png


プロパティウインドウが開いたら、「C/C++」の「プリコンパイル済みヘッダー」を「使用しない」に設定します。

arduboysym02.png


なお、もともとのサンプルに含まれていた「bitmaps.h」「bitmaps.cpp」はプロジェクトから削除しておきます。


これで準備OKです。実行するとシミュレータ上でArduboy用スケッチが動作します。
カーソルキーとCTRLとZが十字ボタン・Aボタン・Bボタンに対応します。

arduboysym04.png


実際にはWindows用のプログラムとして動作していますので、ブレークポイントの設定や変数値の確認なども、下図のように通常のWindowsでのデバッグと同様に行えます。
これは素晴らしいですね。

arduboysym05.png


なお、「App.cpp」ファイルの「#define RT_ARDU_LANDSCAPE」の行がコメントアウトされているのを有効にすると、Arduboyを横にした状態で動作を確認することができます。
(ただ、残念ながらカーソルキーの動作までは回転してくれませんでした。)

arduboysym06.png
arduboysym07.png

さらに、この実行コードをHTML5ファイルに変換することができます。
さすがクロスプラットホーム用ツールです。
方法は下記のページに書かれています。

proton:html5_setup [RTsoft Wiki]

まずEmscriptenをインストールします。

Download and install − Emscripten 1.36.5 documentation

インストールしたらスタートメニューのEmscriptenから「Emscripten Command Prompt」を開き、「emsdk」と入力して応答があればインストール完了です。
環境変数PATHにEmscriptenのフォルダが追加されているので、いったんPCを再起動します。

HTMLファイルの生成コマンドは、「ArduboySim\html5」フォルダの中の「build_release.bat」です。
ただし、最初から入っている「build_release.bat」はサンプルのブロック崩しのソースファイルに合わせてありますので、編集が必要です。
現時点では56行目あたりからがその場所になります。
REM **************************************** APP SOURCE CODE FILES
REM set APP_SRC=%APP%\App.cpp %ARDUBOY%\ardu_main.cpp %ARDUBOY%\breakout_bitmaps.cpp
set APP_SRC=%APP%\App.cpp %ARDUBOY%\ardu_main.cpp
REM **************************************** END SOURCE

ソースファイルのリストにbreakout_bitmaps.cppというファイルが含まれていますので、これを取り除いています。


また、現在のバージョンはコンパイル時にSDLのインクルードファイルが見つからないというエラーが出ました。
やむなく音声は無しの指定にしました。(下記引用の赤い部分を削除)
SET CUSTOM_FLAGS= -DHAS_SOCKLEN_T -DBOOST_ALL_NO_LIB -DPLATFORM_HTML5 -DRT_USE_SDL_AUDIO -DNDEBUG -DC_GL_MODE -s LEGACY_GL_EMULATION=1 --memory-init-file 0 -Wno-switch -D__AVR_ATmega32U4__ -DRT_ARDUDEV -DRT_RUNS_IN_BACKGROUND -DRT_EMTERPRETER_ENABLED -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1


これで、「build_release.bat」ダブルクリックすればHTML5ファイルが生成されます。
(結構時間がかかります。)

結果、こんな感じのHTMLファイルが生成されました。
ちゃんと遊ぶことができます。(実物は→こちら
一緒に生成されたJavaScriptのファイルは3.6MBほどありました。

arduboysym08.png


Arduinoのシミュレータは世の中にはあまりありません。
開発ボードも周辺ボードも数が多いので、実際問題、サポートが困難なのでしょう。
関連のトピックが下記にありました。

Arduino simulator for debugging

しかし、ArduboyはArduinoベースとはいえ、ハードウェアのスペックは固定されており、外付けの機器も無く、用途もゲームのみ、ということでシミュレータが作りやすい条件だったのかもしれません。
かなり実用的なので、ありがたく使わせて頂こうと思います。
posted by boochow at 18:36| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする

Visual Studio用のArduino開発プラグインを試してみた

Arduinoの開発環境は、PCなどの環境と比べるとデバッグが大変です。
iPhoneやAndroidはエミュレータを使って開発できますが、Arduinoはデバイスが外部につながっているのでエミュレーションが通用する範囲は限界があります。

とはいえ、ステップ実行や実行中に変数の内容を確認するくらいは、できて欲しいものです。
以前も書いたように、私もESP8266用PNGデコーダはVisual Studioで開発してからESP8266へポーティングしていました。

今回Arduboyの開発を調べていたら、Visual Studio 2015にはArduino開発用プラグインがあることを知り、試してみました。
これはサードパーティ製のツールのようで、無料で使えます。有償のプロフェッショナル版もあります。

インストール方法など、参考にした記事はこちらです。

Arduboy開発にVisual Studioを使う - Qiita

また、本家のマニュアルはこちらです。

Table of Contents - Arduino IDE for Visual Studio and Atmel Studio

このプラグインを入れると、一応ブレークポイントを設定したり、実行時の変数の内容を確認することができるようになります。
(ただし、確認したい内容が変わるごとにビルドしてアップロードしなければならないようですが・・・)

このデバッガ機能は有償版にしかありませんが、インストール後45日間は無料で使えます。
有償版の料金は、学生/ホビイスト向けは$25/1CPU、$45/3CPU、商用版は$75/1CPU〜となっています。


というわけで45日間しか使えないデバッグ機能を試してみました。

インストール後はVisual Studioに下図のようなツールボタンが追加されます。
ハイライトされているのがビルド&アップロード&実行のボタンです。

vMicro01.png


また、「開く」メニューに「Arduino Project」が追加されます。
Arduino用.inoファイルを選択すると、Visual Studio用のプロジェクトファイルが生成されます。
(このファイルにはArduino IDE関係の情報なども書き込まれているようで、Arduino IDEのディレクトリを変更するなどしたときは、プロジェクトファイルを一旦削除しないと動作がおかしくなることがありました。)

vMicro02.png



これでどの程度デバッグができるのか、試してみました。
実験に使うコードはArduboy用ブロック崩しです。

まず、ブレークポイントを設定します。
すると、ブレークポイントの右上に歯車アイコンが現れます。
ここでブレークポイントでの処理内容を設定をします。

vMicro03.png


処理内容として、ラケットの位置を表す変数racketの内容を監視してみます。

「アクション」にチェックを入れます。
「出力ウインドウにメッセージを記録する」の欄は、
{変数名=?}
という文字列があると、変数名で指定した変数の値を観測できます。
今回は
racket={racket=?}
と記入しておきます。
「実行を続行します」をチェックすると、ブレークポイントでも停止しなくなります。

vMicro04.png


この状態でプログラムをビルドしてアップロードすると、Arduboy側で動作しているプログラムのログがPC側の画面に出力されます。
ログに含まれている変数の値は、別ウインドウで確認することができます。

vMicro05.png


同時に1つ以上の変数をチェックすることもできます。
ボールの座標を表示させてみました。

vMicro06.png
vMicro07.png


また、「条件」を設定すると、条件が成立したときのみブレークポイントを有効にすることができます。
以下の例では、ボールのY座標がSCRNHEIGHT-1より大きいとき、Y座標を出力して停止します。

vMicro08.png


設定できる条件には、変数の値の条件以外にHit Countでも行えます。
これは関数milis()の値が、(1)指定した値のとき(2)指定した値の整数倍のとき(3)指定した値以上のとき に成立します。
milis()は時間ですので、一定時間おきにブレークポイントを有効にすることができます。
また、milis()の代わりに自分でヒットカウンターを指定することもできます。この設定はプロパティウインドウで行えます。

vMicro09.png


ブレークポイント全体の管理は、Visual Studioのブレークポイントウインドウで行えます。

vMicro10.png



感想ですが、とりあえず変数の内容が確認できるだけでも大助かり、というところではあります。

しかし、一旦ビルドしたプログラムを後からあれこれブレークポイントを設定したり、好きなところで一時停止させてその時点の変数の値を調べる、といったことはできないようです。
かろうじて、設定したブレークポイントを無効にすることはできます(歯車アイコンの隣のアイコン)。
その場合でもログファイル自体は出力され続けますので、コンティニューボタンを押しっぱなしにすることに相当するようです。
それ以上の変更(ブレークポイントの追加や条件の変更)を行った場合、再度ビルド→アップロードの手順が必要になります。

自分で手間をかけてシリアルポートにprintfしても、まあまあ同じようなことはできます。
ソースコードを汚さずにGUIから各種設定をできるところが大きなメリットだと思います。
ボードにデバッグ機能が付いたArduino M0 Pro Atmel Studioでもデバッグはできますので、用途に合わせてということになるでしょう。

なお、今回使用したVisual MicroはESP8266版Arduinoでも使えるようですので、そのうち試してみたいと思います。

Arduino ESP8266 in the Visual Studio IDE

posted by boochow at 00:53| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする

2016年08月19日

Arduino Web EditorでGenuino 101を使ってみた

現在仕事は夏休みで、しかも暑くて出歩くどころではない、ということで、日頃の余暇不足を取り戻すべく連日ブログを更新しているわけですが、もう一つ放置していたボードがあったのを思い出しました。

Genuino 101です。

genuino101.jpg


これはインテルのCurieというチップを使ったボードで、「Arduino UNOの後継」という触れ込みです。
CPUも全く異なるのですが、ボード単体の機能面としては

・Bluetooth Low Energyを標準搭載
・6軸加速度センサを標準搭載

といったあたりが目新しいところです。
詳しい解説としては下記の記事があります。

Curie搭載の開発ボード「Genuino 101」を試す - Arduino UnoやGalileoとの比較から性能を検証する (1) Intelが注力するIoT分野の新製品 | マイナビニュース

私は単に新製品、というだけで発売時(3月の末ごろでした)に購入したのですが、仕事が忙しく、放置したまま忘れていました。
まあ、上記の新機能だけでは実はそれほど情熱が湧かなかったというのも本音なのですが・・・。


さてそれとは別に、先日新しく「Arduino Create」なるサービスが開始されました。
これはmbedなどと同じく、Arduinoの開発をオンラインで行えるというサービスです。
こちらの記事で知りました。

Arduino Createが正式リリースされました | スイッチサイエンス マガジン

サービスとしては開発環境「Web Editor」の他に、Arduinoから接続できるクラウドサービスなどもあるようです。

arduinocreate.png


しかし、クラウドのほうは対応ボード(現在のところYUN Shield、MKR1000、WiFi Shield 101)が必要なようです。
クラウドはMKR1000が国内発売されたら考えることにして、まずはWeb EditorでGenuino 101を動かしてみました。


現在、Web Editorは「招待制」になっていますが、実際には招待を希望すると翌日にはアカウントがもらえました。
立ち上げると、こんな感じの画面です。
左側がメニュー、右側が編集領域になっています。
mbedの環境よりもデザインは整理されている印象です。

webeditor01b.png


この状態では、まだボードが認識されていません。
Web Editorは、開発はWeb上ですが、ボードとWeb Editorを接続するために、PCに常駐ソフト(プラグイン)のインストールが必要です。
証明書の警告が出るなど、相変わらず微妙な感じではありますが、とにかくインストールします。
あとは普通にボードをUSBでPCに接続すると、常駐ソフトが認識してくれました。

ボードの種類と接続先のシリアルポートを選択できたら、まずはLチカです。
画面左の「Examples」から「01.Basics」を選ぶと、その中に「Blink」があります。

webeditor02b.png


コンパイルとボードへの書き込みは、右側のエディット領域の上部の「→」のボタンです。
このあたりは、IDEと同じなので、IDEに慣れていれば分かりやすいですね。

ボタンをクリックすると、コンパイルから書き込みまで自動で行われます。
処理中はボタンがBUSYの表示に変わります。

webeditor03b.png


これだけで、ボードにスケッチをアップロードできました。
mbedに比べるとファイルコピーの手間がない分、お手軽な感じです。

ちなみにGenuino101はLEDが緑色でした。

genuino101b.jpg



Lチカの次は、Genuino101特有の機能を試してみました。
画面左のLibrariesを選択し、検索フィールドに「Curie」と入力するとCurieの機能をサポートするライブラリとサンプルがいろいろ出てきます。

webeditor04b.png


まずは加速度センサを試してみます。
ライブラリ「CURIEIMU」の例題から「Accelerometer」を選びます。
webeditor05b.png

そして先ほど同様、ボードにアップロードします。

このスケッチは、シリアルポートに結果を出力しています。
シリアルポートの出力も、Web Editorから確認することができます。
画面左の「Serial Monitor」を選択すると、ボードのシリアルポートの出力がリアルタイムに表示されます。
これはなんだか不思議な感じです。

webeditor06b.png


なお、シリアルポートに出力するスケッチの場合、Web Editor側でSerial Monitorを表示するまで、動作がブロックされるようです。
最初いくつかのスケッチがうまく動作せず、悩んでしまいましたが、原因はこれでした。


ローカルでシリアルポートの出力を確認したい場合は、常駐ソフト(タスクバーにアイコンがあります)のメニューからシリアルモニタを開くことができます。
これは実際には常駐ソフトへブラウザからアクセスすることで実現されているようです。
下はサンプル「ASCIITable」の出力をローカルの画面で確認した様子です。

webeditor07b.png
webeditor08b.png



Bluetoothのサンプルも試してみました。
ライブラリ「CURIEBLE」にサンプルがあります。

webeditor09b.png


「LED」はスマホのアプリからBLE経由でGenuino101のLEDをオン・オフするものです。
下記に非常に分かりやすい記事がありますので、ここでは省略します。

Genuino (Arduino) 101 で BLE 経由でLチカさせる - Qiita


さて、ちょっと使ってみての感想です。
まずmbedと比べると後発ですが、その分よくできているように思います。
IDEでできることは、大体できるようです。

また、純正のライブラリやツールが常に最新の状態に保たれることも大きなメリットです。
最近もGenuino 101関連のアップデートがあったようです。

Arduino Blog – Intel releases an improved version of the Arduino 101 core!

ESP8266も、Arduinoからモデムとして使うだけであれば、そのうちライブラリが整備されそうです。

一方で、ESP8266をArduinoボードとして使うような、非純正のボードは現在サポートされていないようです。
ESP8266のCPUは他のボードとは異なりますので、専用のコンパイラが必要です。
ということは、オンラインコンパイラにESP8266用のコンパイラとライブラリを用意しなければならないわけで、ここらへんが課題なのではないかと思います。

オープンソースで公開されている様々なライブラリや、非純正のボードなども、Arduino環境の魅力の一つです。
そちらを重視するのであれば、まだIDE環境のほうに分があるようです。

Arduino Web Editor、純正のボードとライブラリだけで開発するには、結構良さそうな開発環境です。
リリースされたばかりのツールですから、今後に期待です。
posted by boochow at 00:48| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする

2016年08月18日

GitHubを利用開始、Arduboy用ブロック崩しを公開

Arduboy用に作ったブロック崩しですが、せっかく作ったのでArduboyのコミュニティに投稿してみました。

ガイドラインを読むと、コードの公開先はGitHubを推奨されていましたので、昨日アップロードしたのと同じコードを拙い英語の説明をつけて以下で公開しました。

boochow/breakout-v: Simple breakout game for Arduboy

コミュニティに投稿したページはこちらです。

Breakout-v - vertical screen breakout - Arduboy / Games/Apps - Community

GitHubのアカウントはだいぶ以前に作ってあったのですが、活用していませんでした。
今回再びチュートリアルからやり直しました。
マークダウン記法もずっと昔は使っていたのですが、すっかり忘れていました・・・。
posted by boochow at 20:55| Comment(0) | Arduino | このブログの読者になる | 更新情報をチェックする
人気記事