記事

IoTへの挑戦 Raspberry PiでWindows 10 IoT Coreを動かす(6)(Ver 2.0)

Visual Studio 2017のデバッガの機能を利用してBlinkyの動きを見る

 本記事は2017年6月26日に内容を更新してV2.0になりました。マイコン・ボードはRaspberry Pi 3 model B、IDEがVisual Studio 2017にアップデートしています。アップデートに伴いライブラリなど新しく追加されたものがありますが、基本的な操作方法はVisual Studio 2015と変わりありません。同じように操作できます。

 

 前回、Blinkyのプログラムを起動して、Raspberry Pi 3 model BのGPIOの5番ピンでLEDを点滅させることができました。
 今回は、Visual Studio 2017のデバッガの機能を利用して、プログラムがどのように動いているのか確認します。

サンプルプロジェクトHelloBlinkyを開く
 前回テストしたBlinkyのプロジェクトを開いて、MainPage.xaml.csのソース・ファイルを開くと次のようになります。

 

 デバッグモードでステップ動作を行うためには、ブレークポイントを設定する必要があります。ブレークポインを設定してデバッグモードでプログラムをスタートすると、プログラムを実行し、ブレークポイントに達するとその命令を実行する前にプログラムを中断し、プログラムの実行状況を確認することができます。

ブレークポイントの設定 
 プログラムを中断する場所をカーソルで選択し、メニューバーのデバッグを選択すると、次に示すようにドロップダウン・リストが表示されます。
 ソース・プログラムのデバッグで中断する場所を選択し、ドロップダウンリストの「ブレークポイントの設定/解除 (G) F9」を選択すると、ブレークポイントが設定されます。


 

 中断する場所を設定し、F9ボタンを押してブレークポイントを設定することもできます。ブレークポイントが設定されると、次に示すように命令の前に赤丸のマークが表示されます。

 

 メイン・プログラムの最初の命令とタイマのイベントごとに呼び出されるTimer_Tick()関数の入り口に設定します。関数の入り口の範囲を示す{ の位置にもブレークポイントを設定できます。

 

デバッグを開始
 ブレークポイントの設定が終わったら次はデバッグの開始です。メニューバーのデバッグ>デバッグの開始、またはツールバーの右向きの緑色の三角のアイコンをクリックしてデバッグを開始します。しばらくするとデバッグモードが開始されます。同時に、次に示すように最初のブレークポイントでプログラムの実行が中断します。

 

ステップ動作を行う
 ステップ動作を行うためにメニューバーのデバッグを選択すると、次に示すようにデバッグモードでの各種の機能を選択できるリストが表示されます。

  このリスト中でもよく利用される次の機能についてはツールバーにアイコンとして設定されています。

続行  デバッグの開始、中断したデバッグを再開し続行する
すべての中断 プログラムを停止せずデバッグを中断する
デバッグの停止 デバッグを停止する
再起動 現在のデバッグ セッションを停止し、デバッガのスタートアップ プロジェクトを再起動する
ステップ・イン 関数を呼び出す場合、その関数の内部の最初の処理を行い中断する。それ以外は次の命令が実行され中断する
ステップ・オーバ 関数を呼び出す場合、呼び出した関数の処理を行った後中断する。
それ以外は次の命令が実行され中断する
ステップ・アウト 関数内の残りの命令を実行し、関数の呼び出しもとに戻り中断する



 今回は、「ステップイン」アイコンをクリックしてプログラムの実行の様子を確認していきます。
 InitializeComponent()を呼び出す命令が、最初に停止したブレークポイントとなっています。この状態から最初のステップ動作としてステップインを実行します。

 関数の呼び出しの命令でステップインを指定すると、呼び出された関数に制御が移ります。InitializeComponent()はシステムが用意したモジュールですので、数ステップ動作を確認し、ステップアウトでこの関数から抜け出します。

 ステップアウトで関数の処理を終えると、この関数を呼び出した命令に戻ります。

 

 ステップイン処理で進みます。今度は関数の処理が終えているので、次に示すように次のタイマの設定の命令に実行ポイントが移ります。

 

 ステップインで各行の命令を実行していくと、1行ずつ順番に黄色い矢印が進んでいきます。次に示すように、gpioの初期化の関数を呼び出す命令の行まで進みました。Initgpio()が汎用入出力ポート初期化関数です。

 

 関数を呼び出す命令でステップインを実行すると、次に示すようにInitgpio()関数の最初に制御が移ります。

 GPIOのポートを出力に設定し、出力の設定値をHIGHにしています。GPIO初期化処理が正しく行われたと出力しGPIOの初期化を終えます。

 

 GPIOの初期化の後はタイマを起動します。

 その後は次に示すシステムが用意したフォームをアクティブにして表示する処理を行います。この処理が行われるとWindowの画面が表示されます。

 メインの処理はタイマを起動したらあとは何もすることがなくなります。LEDの点滅は500msごとに起動されるTimer_Tick() 関数で行います。フォームの表示後はタイマによりTimer_Tick() 関数が呼び出され、デバッガもその関数に制御が移ります。ステップイン操作で1行ずつ動作を確認することができます。

タイマから呼び出される処理
 500msごとに起動されるTimer_Tick() 関数は最初に、GPIOに出力する設定値pinValueの値がHIGHか確認します。
 HIGHならLOWを設定し出力します。HIGHでないときはHIGHを設定しディジタル・ポートに出力しLEDを点滅します。

 pinValueの値がHIGHの場合、次に示すようにLOWを出力します。

 今回は、Visual Studio2015のデバッグ処理でプログラムを1命令ずつ実行し、LEDの点滅を確認しました。デバッグモードで命令の実行の中断時には、その時点の変数の値の様子が確認できます。次回確認します。

(2016/2/15 V1.0)
(2017/6/26 V2.0)マイコン・ボードをRaspberry Pi 2 から3へ変更、Visual Studio 2015を2017へ更新。これらの変更にともなって図、文章を修正。

<神崎康宏>


バックグラウンド

デバッグ;ここで用いているプログラムBlinkyは、マイクロソフトが用意しているので、正常に動きます。したがって、デバッグの必要はありません。今回は、デバッグの操作の基本であるブレークポイントの使い方を説明しています。

連載メニュー IoTへの挑戦 Raspberry PiでWindows 10 IoT Coreを動かす

(1) 5千円台のマイコン・ボードRaspberry PiでWindows10が動く

(2) Windows 10 IoT Coreのダウンロードとインストール

(3) Windows 10 IoT Core Dashboardが開発基地

(4) 無償で使える開発ツールVisual Studio2017のインストール

(5) Visual StudioでLEDを点灯するサンプル・プログラムを動かす

(6) VisualStudio 2015のデバッガの機能を利用してBlinkyの動きを見る

(7) Blinkyプロジェクトの中身を見る

(8) 押しボタン・スイッチの検出を行うプログラムをテスト

(9) デバッガを使ってPushButtonの処理内容を確認

(10) UIをもたないでバックグラウンドで実行されるプログラム

(11) ボタンとLED点滅の新規プロジェクトの作成