今回はデバッグの主要な機能を一通り紹介します。前回の記事では、典型的なデバッグの手順を説明しました。PICマイコンの処理をプログラムの特定の行で止め、その時の変数の値を確認する、という内容でした。IDEのデバッグには他にも色々な機能があります。IDEが持っている主要なデバッグ機能を説明します。プログラムは前回使用したSPI通信の動作確認用プログラムを使用します。それでは、デバッグできるように準備しましょう。IDEでプロジェクトを開き、電池ボックスの電源を入れましょう。デバッグ手順その2(「デバッグ手順その1」は前回の記事で説明しています)前回の記事では、プログラムの特定の位置で処理を止めて、そのときの変数の値を確認しました。ところで、プログラムが意図したように動作しない場合は、どこか特定の位置でプログラム処理を止めるというより、最初から順番に実行させて、処理がどのように進んでいるのか確認したいケースもあります。そこで、main関数の最初からプログラムを順番に1行1行実行させながらデバッグしていく方法を説明します。それでは、最初にプログラムにブレークポイントが設定されていないことを確認してください。ブレークポイントが設定されている場合、その行の行番号の位置をもう一度クリックしてブレークポイントを解除します。次に、デバッグボタンをクリックしてデバッグを開始します。デバッグボタンをクリックすると例のダイアログか表示されると思いますので、前回と同様に内容を確認したふりをしてOKボタンをクリックしてデバッグに入りましょう。ここまではいいのですが、その後は何も変化はないですよね。今回はブレークポイントを設定していませんので、どこかで止まることなく処理が進み、おそらく今頃はwhile文を実行しているに違いありません。実況中継している場合じゃないですよね。プログラムの先頭から順番に処理を実行してもらいましょう。先頭から順番に実行するには、まず最初に以下の「Pauseボタン」(一時停止ボタン)をクリックして処理を一時停止させます。一時停止すると、以下の「Resetボタン」(リセットボタン)が有効になりますので、リセットボタンをクリックします。すると、以下のようにmain関数の最初の行で処理が停止している状態になります。それでは、ここから1行ずつPICマイコンに処理を実行してもらい、必要があれば変数の値を確認したり、どのように処理が進むか確認しながらプログラム処理を進めていきましょう。緑色の行は、これから実行する処理になります。Overボタン」をクリックします。以下のようにボタンが隠れている場合があります。このような場合は「>>」マークにマウスカーソルを合わせると、以下のように隠れているボタンが表示されます。Over」という意味はよくわかりませんよね。「Step」は1ステップずつ実行する、というような意味合いで用いられています。「Over」の意味は、他のボタンとあわせて後のセクションで詳しく説明します。Overボタン」を1回クリックしてください。クリックすると、緑色の行が次に進みます。0b0000;」が実行され、今の緑色の行はこれから実行される行になることを意味しています。それでは、OSCCON1bits.NDIVレジスタの中身を確認してみます。このように「.」(ドット)で変数を指定している場合(=構造体の数値を確認する場合)、カーソルの位置により表示される内容が異なります。先ほど実行した行は「NDIV」の値の設定です。「NDIV」の値を確認するには「NDIV」にカーソルを合わせます。すると、以下のように「NDIV」レジスタの情報が表示されます。「OSCCON1bits」にカーソルを合わせると、以下のように「OSCCONbits」に関する情報が表示されてしまいますので、カーソルを合わせる位置に注意します。Over」ボタンをクリックしながら、1行1行処理を進め、変数の中身を確認していくことができます。Over実行していくのではなく、特定のところまで処理をまとめて実行してもらいたいケースが出てきます。最初の動作周波数設定やピンの属性設定などは、単にレジスタに値を設定するだけの処理で問題が発生することはあまり考えられません。そこで、設定部分はまとめて実行してしまいましょう。Cursor」(カーソルがある行まで実行する)という機能を使用します。0;」の行まで処理を進めましょう。0;」の行のどこかを一度クリックしてカーソルを移動します。Cursor」(カーソル行まで実行)ボタンをクリックします。0;」の行まで処理を進めて止まります。このようにカーソル行まで実行する機能を利用すると、プログラムの最初から効率的に処理を追うことができます。Overボタンをクリックしてください。spiRead1ByteData(0xD0);」の行に進みます。Overボタンをクリックすると、この行が実行されてchipidにチップIDが格納されます。ところで、処理する行が関数の場合、関数の中身に処理を進めたいことがあります。Overボタンは実行する行が関数の場合でも、1回クリックすると関数全体をいっぺんに処理してしまいます。関数の行を実行する際に関数の中身に処理を進めたい場合があります。Into」ボタンを使用します。それでは、これからは説明に沿って操作してみてください。Intoボタンをクリックします。Overボタンと異なり、関数に処理が進みます。Intoボタンを使えば関数内部に処理を進めることができます。ここで用語について確認しておきます。Overの「Over」とは「越える」というような意味合いがあります。その行を関数内部に入らずに越えていくようなイメージです。Intoの「Into」は「中に」というような意味合いで、関数の中に入っていく、というようなイメージです。Intoを使い分けてみてください。Cursorなどを使い分けながらデバッグしていくことになります。今回の記事では、プログラムの最初からステップ実行して、PICマイコン内部で処理がどのように進んでいるか確認しました。前回の記事ではデバッグ実行前にブレークポイントを設定し、その行で止めて変数の内容を確認していました。Over実行したい、というケースも出てきそうです。この操作には注意が必要ですので補足説明いたします。spiRead1ByteData(0xD0);」の行にブレークポイントを設定して、デバッグを開始すると、この行で処理が止まった状態になります。Over実行できません。In実行ができないようです。In実行ができるようになります。前回と今回ご説明したデバッグ機能を使用すれば、ほとんどのケースに対応できると思います。デバッグには他にもいろいろな機能がありますが、残りの機能についてはマイコンの内部動作の理解が必要だったりしますので、説明は省略いたします。