アプリケーションノート 3378

IARコンパイラとMAXQ2000評価キット入門

筆者: Kris Ardis

要約: このアプリケーションノートでは、MAXQ®プラットフォームを対象としてCで記述されたアプリケーションを作成、構築、およびデバッグする方法について説明します。また、MAXQ2000のいくつかの機能を紹介します。

はじめに

MAXQプラットフォームは、世界的なツールセット(IARのEmbedded Workbench for MAXQ)によってサポートされています。このアプリケーションノートでは、MAXQプラットフォームを対象としてCで記述されたアプリケーションを作成、構築、およびデバッグする方法について説明します。また、MAXQ2000 (MAXQファミリで利用可能な最初のマイクロコントローラ)のいくつかの機能についても具体的に示します。

このアプリケーションノートは、MAXQプラットフォーム用IARコンパイラのバージョン1.12Bを使用して記述されました。これらの命令は、後のバージョンの製品についても有効であると考えられます。これらの命令は、MAXQ2000評価キットと使用できるように記述されています。

MAXQ2000評価キットのセットアップ

コードの記述を開始する前に、MAXQ2000評価キットを接続しましょう。キットには3つの基板が付属しています。1つは、小さなLCD画面が付いています。最も大きな基板(図1ではLCDドータボードが接続されています)が実際のMAXQ2000評価キットです。このアプリケーションノートの後半で、この基板の機能を説明します。LCD基板を取り出して、J3というラベルの貼られたMAXQ2000評価キット上のヘッダに接続します。

図1. LCD基板を取り付けたMAXQ2000評価キット
図1. LCD基板を取り付けたMAXQ2000評価キット

最後に残った評価キットの基板は、JTAGボードです。MAXQ2000のローダとデバッグのエンジンは、JTAGプロトコルを使用して通信を行います。実際に、パーソナルコンピュータ用の汎用JTAGアダプタは市販されていないため、ダラスセミコンダクタがシリアル/JTAGコンバータボードを用意しました。評価キットには、小さなコネクタも含まれています。図2に示すように、このコネクタを使用してMAXQ2000評価キットとJTAGボードを接続します。ケーブルは、J4というラベルの貼られたMAXQ2000評価キット上のヘッダと、P2というラベルの貼られたJTAGボード上のヘッダに接続します。コネクタの赤色の側が両ボードのピン「1」と「2」と書かれた側になるように注意してください。

図2. MAXQ2000評価キットとJTAGボードを接続
図2. MAXQ2000評価キットとJTAGボードを接続

MAXQ2000評価キットには3つのジャンパがあります。ヘッダJU1、JU2、およびJU3のピン1と2をともにジャンパで接続してください。また、水晶発振器がY1 (基板上のマイクロプロセッサの近く)に実装されていることを確認してください。このアプリケーションノートの実証プログラムでは、13.5MHzの水晶発振器を想定しています。JTAGボードにも3つのジャンパを接続する必要があります。ヘッダJH1、JH2、およびJH3をジャンパで接続してください。

このセットアップで使用する電源は、DC 5V ±5%で300mAを出力します(中央がプラス)。JTAGボード上の電源ジャックJ2に電源を挿入します。

最後に、PCシリアルポートをJTAGボードに接続する必要があります。標準の9ピンストレートスルー型のシリアルケーブルを使用して、コンピュータ上のシリアルポートの1つと、JTAGボード上のシリアルポートを接続します(注:MAXQ2000評価キット上のシリアルポートに接続しないでください。正しい接続の詳細については、図3を参照してください)。

図3. シリアルケーブルの正しい位置(JTAGボードに取り付け)
図3. シリアルケーブルの正しい位置(JTAGボードに取り付け)

以上で、IARツールを使用する準備が完了です。

IARコンパイラ入門:Hello World

IARは、MAXQプラットフォーム用に、コードサイズを限定した評価版コンパイラを提供しています。これは、MAXQ2000評価キットに同梱されたCDに収められています。また、http://www.iar.comから評価版をダウンロードすることもできます。指示に従ってインストールします。インストール場所とオプションについてはデフォルトを選択してください。IAR Embedded Workbench製品は、Windows®プラットフォームでのみ利用可能であることに留意してください。

[スタート]メニューから、[IAR Systems] [IAR Embedded Workbench for MAXQ] [IAR Embedded Workbench]を順に選択して、IAR Embedded Workbenchを開始します。ここでは、MAXQ2000評価キット用の簡単なアプリケーションを作成します。

新しいワークスペースを作成します。[File]の下で[NEW]を選択します。「ソース/テキスト」と「ワークスペース」のいずれかを選択できるダイアログボックスが表示されます。[WORKSPACE]を選択して[OK]をクリックします。ファイルダイアログが表示され、新しいワークスペースについてユーザの名前を入力するよう求められます。新しいワークスペースを保存したい場所を選択し、ワークスペースの名前を入力します。今回のプロジェクトでは、ワークスペースの名前を「helloworld」とします。ワークスペースの名前を入力すれば、[SAVE]をクリックします。

次に、ワークスペースを開いてプロジェクトを作成する必要があります。[PROJECT]メニューの下で、[CREATE NEW PROJECT]を選択します。もう1つのファイルダイアログが表示されます。ドロップダウンボックス[Tool Chain]の下で[MAXQ]が選択されていることを確認します。プロジェクトの名前を入力し、[CREATE]ボタンをクリックします。ここでは、プロジェクトの名前を「helloproject」とします。

以上で、プロジェクトが作成されました。次に、MAXQ2000評価キットで使えるようにプロジェクトを構成する必要があります。プロジェクトマネージャのウィンドウで、「helloproject - Debug」の行を右クリックし、[Options]という項目をクリックします(図4)。ほとんどはデフォルトのオプションでOKですが、変更の必要な設定がいくつかあります。

図4. プロジェクトを右クリック
図4. プロジェクトを右クリック

プロジェクトのオプションでは、[CATEGORY]の下で[XLINK]を選択し、次に[Include]タブを選択します。ダイアログの一番下で、[Override default]チェックボックスをオンにし、下の編集行の右側にある小さなボタン([...]と表示)をクリックします。ファイル選択のダイアログが表示されます。ファイル「lnkmaxq200x.xcl」¹を選択し、[OPEN]をクリックします。図5に示すような、プロジェクトオプションのダイアログが表示されます。

図5. MAXQ2000について正しいリンカーオプションを設定
図5. MAXQ2000について正しいリンカーオプションを設定

ここで、[CATEGORY]の下で[C-SPY DEBUGGER]を選択します。[Driver]というドロップダウンボックスで[JTAG]を選択します。これによって、ソフトウェアシミュレータではなく実際のハードウェア上でアプリケーションをデバッグするようIAR Embedded Workbenchに伝えます。また、選択した「デバイス記述ファイル」が「$TOOLKIT_DIR$\Config\maxq200x.ddf」であることを確認します。図6は、このダイアログウィンドウの正しい構成を示しています。

図6. MAXQ2000で使用するデバッガのオプション
図6. MAXQ2000で使用するデバッガのオプション

必要となる最後のプロジェクトオプションは[JTAG]です。これは、[CATEGORY]リストの下の[C-SPY DEBUGGER]の副項目です。[COM Port:]という編集ボックスで、MAXQ2000評価キットとの通信に使用するPCのCOMポートを入力します。一般的にはこれは、COM1またはCOM2ですが、USBシリアルポートアダプタを持つ多くのユーザは、COM4またはそれ以降を使用します。

以上で、IARツールを正しく構成してMAXQ2000評価キットで使用することができるようになりました。プロジェクトオプションのウィンドウ上で[OK]ボタンをクリックします。次に、今回のプロジェクトのためのソースコードを作成する必要があります。最初に、LEDを単に切り替えるだけの、簡単なHelloWorldスタイルのアプリケーションから開始しましょう。

ツールバーの新規ファイルのボタン(ツールバーの左端にある空白のページ)をクリックするか、[FILE]メニューから[NEW]を選択します。[SOURCE/TEXT]を選択して[OK]ボタンをクリックします。「Untitled1」という名前の新しいウィンドウが表示されます。新しいウィンドウで、次のコードを入力します。
#include <iomaxq200x.h>

void main()
{
    unsigned int counter1;
    unsigned int counter2;
    PD0 = 0xff;
    while (1)
    {
      for (counter1 = 0; counter1 < 0xffff; counter1++)
      {
        for (counter2 = 0; counter2 < 0x10; counter2++)
        {
        }
      }
      PO0 = PO0 ^ 0xff;
    }
}
[Save]ボタン(ツールバーのディスクのアイコン)をクリックするか、メニューから[FILE] [SAVE]を選択して、このファイルを保存します。表示されるファイルダイアログで、ファイル名として「demo.c」を入力して[Save]をクリックします。ファイル「demo.c」はプロジェクトウィンドウには表示されないことに留意してください。プロジェクトを構築することができるようにするには、その前に、このソースファイルをプロジェクトに追加する必要があります。プロジェクトウィンドウで、「helloproject - Debug」の行を右クリックし、表示されるメニューから[Add Files...]を選択します。ファイルダイアログが表示されれば、ファイル「demo.c」を選択して[OPEN]をクリックします。これで、ソースが追加され、プロジェクトを構築することができるようになります。

[PROJECT]メニューの下で、[REBUILD ALL]オプションを選択します。画面の一番下にあるメッセージウィンドウに、大量のデータが出力されます。データの最後は次のようになります。
Total number of errors: 0 (エラー総数:0)
Total number of warnings: 0 (警告の総数:0)
エラーまたは警告が表示された場合、コードを正しく入力したかどうか、またプロジェクトのセットアップ手順のすべてにしたがったかどうかを確認します。この時点で表示されると思われる共通の警告は、「last line of file ends without a new line (ファイルの最後の行に改行がありません)」です。このエラーを受け取った場合は、ソースコードの最後の行に移動し、ENTERを数回入力し、最後の閉じ括弧「}」の後に数行の改行を追加します。

プロジェクトの構築が正常に完了すれば、プロジェクトを実行する準備が完了です。このアプリケーションノートの最初の項で説明したとおり、JTAGボードとMAXQ2000ボードが接続されて電力が供給されていることを確認します。また、この最初のデモでは、LEDセグメントを点灯させる1つのスイッチをオンにする必要があります。SW6という名前のスイッチを探して、スイッチ番号8をオン(上側)位置に切り替えます。プロジェクトを実行するには、[PROJECT]メニューを選択してから、[DEBUG]オプションを選択します。アプリケーションをダウンロード中であることを示すウィンドウが表示されます。

プロジェクトは、実行可能コード(PD0 = 0xff)の第1行で最初のブレークポイントを押すことによって開始されます。IAR Embedded Workbenchで利用可能なデバッグオプションについては、後で調べてみます。ここでは、ツールバーの[GO]ボタン(3つの青色の矢印)をクリックするか、[DEBUG]メニューの下で[GO]を選択します。1秒間に約1回、ほとんどのLEDセグメントが点滅することがわかります。

以上で、IAR Embedded Workbenchを使用して、MAXQ2000評価キットの最初のアプリケーションをコンパイルし、ロードし、および実行しました。次に、もう少し複雑なサンプルアプリケーションを作成しましょう。その後、MAXQ2000評価キットの機能のいくつかを説明し、さらにIAR Embedded Workbenchで利用可能なデバッグ機能のいくつかを紹介します。

単純なアプリケーション:LCDにカウンタを表示

LEDの切り替えアプリケーションは正常に完了しました。次は、LCDを使用したもう少し複雑なアプリケーションに進みましょう。MAXQ2000マイクロコントローラには、132セグメントの統合LCDコントローラと、コントラスト制御のためのオンチップ抵抗分圧器が備わっています。またMAXQ2000は、LCD画面にじかに電力を供給することもできます。MAXQ2000評価キットには、単純な静止LCD画面が付属しており、4桁の数字といくつかの単純な句読点(2~3のコロンとピリオド。図7を参照)が使用可能です。初めての方のために、LCD上でカウンタを実現するアプリケーションを記述します。後で、LCDを制御するコードについて詳しく説明し、より複雑な例を示します。

以前に説明した手順を使用して、新しいワークスペースとプロジェクトを作成します(この新しいプロジェクト用として、XLINK、C-SPY、およびJTAGのすべてのオプションを再入力する必要があることを忘れないでください)。このワークスペースの名前をLCDDemo、プロジェクトの名前をSimpleLCDとします。この例で使用するソースコードをダウンロードします。LCDDemoプロジェクトを作成したディレクトリに、ファイルlcdcounter.cを配置します。IARプロジェクトウィンドウで、「SimpleLCD - Debug」の行を右クリックし、[Add Files...]を選択します。先ほど追加したファイルlcdcounter.cを選択して[OPEN]をクリックします。

プロジェクトを実行する前に、いくつかの重要なコードセグメントを検討してみましょう。最初に、ファイルの最後まで全体をスクロールし、void main()を読み取る行に移動します。これは、アプリケーションのメインエントリポイントです。LCDを初期化し(関数initLCD)、次に無限ループwhile (1)に移行していることがわかります。メインループは、LCD画面に数字を表示する関数showを呼び出します。ループを通過するたびに、値countを1つずつ増やします。19999を超えると元に戻します。この値は、LCD画面が表示することのできる最大値です。

さて、先に進んでアプリケーションを実行しましょう。[DEBUG]ボタン(ツールバーの右端)をクリックするか、メニューから[PROJECT] [DEBUG]を順に選択します。IAR Embedded Workbenchは、評価キットにアプリケーションをロードする前に自動的にアプリケーションを構築することに留意してください。IARの表示がデバッグモードに変わり、void main()の最初のコード行で実行が停止されることがわかります。[GO]ボタン(3つの青色の矢印)をクリックし、ディスプレイ画面を確認します。画面は高速にカウントアップされるはずです。しばらく見ていると、20000に近づいたときに元に戻るのがわかります。

ここで、MAXQ2000評価キットの有効な機能の1つであるRESETボタンを紹介しましょう。評価キットボードの左下側に、SW2という名前のスイッチとRESETがあります。このボタンを押して、LCD画面に注目します。再び0から即座に開始されるはずです。このボタンはマイクロコントローラのリセットピンにつながっています。アプリケーションの再開が必要な場合は、このボタンを押すだけです。

MAXQ2000評価キットの機能

以上で、MAXQ2000評価キットのLCDドータボードを使用してアプリケーションを構築しました。ここで、評価キットに付属するすべてのツールを詳しく見てみましょう。ここで評価キットのコンポーネントのすべてを取り扱うわけではありません。詳細については、MAXQ2000評価キットの回路図と「MAXQ2000 Evaluation Kit Getting Started Guide」を参照してください。どちらも評価キットに同梱されたCDに収められています。

LCDドータボード

すでにLCDボードの動作については少しだけ確認しました。セグメントおよび一般的な信号の生成は、MAXQマイクロコントローラ上のいくつかのレジスタによって制御されます。LCDドータボードは、LCD画面上の4箇所いずれの場所にも簡単に数字を書き込めるように配線されています。各7セグメントLCDの桁に対するマッピングは同じものであるため、適切なLCDレジスタ値を書き込めるように、コードに以下のテーブルを取り込みます。
#define LCD_PATTERN_0     0x03F
#define LCD_PATTERN_1     0x006
#define LCD_PATTERN_2     0x05B
#define LCD_PATTERN_3     0x04F
#define LCD_PATTERN_4     0x066
#define LCD_PATTERN_5     0x06D
#define LCD_PATTERN_6     0x07D
#define LCD_PATTERN_7     0x007
#define LCD_PATTERN_8     0x07F
#define LCD_PATTERN_9     0x067

int PATTERNS[] = { LCD_PATTERN_0, LCD_PATTERN_1, LCD_PATTERN_2, LCD_PATTERN_3,
                   LCD_PATTERN_4, LCD_PATTERN_5, LCD_PATTERN_6, LCD_PATTERN_7,
                   LCD_PATTERN_8, LCD_PATTERN_9 };

int getLCDDigit(int digit)
{
    return PATTERNS[digit];
}
getLCDDigit関数を使用すると、以下のコードを使用してコントローラ画面に値を書き込むことができます。
/* write the value 612 to the LCD screen */
LCD2 = getLCDDigit(6);
LCD1 = getLCDDigit(1);
LCD0 = getLCDDigit(2);
このLCDボードは、ピリオドとコロンを表示することもできるので、時計、温度表示、およびその他の単純な数字の表示に最適です。図7は、LCDドータボード上のセグメントの全体マップと、各セグメントを有効にするために使われるLCDレジスタビットを示しています。

図7. LCDセグメントをMAXQ2000のレジスタビットに割り当て
図7. LCDセグメントをMAXQ2000のレジスタビットに割り当て

押しボタン

MAXQ2000評価キットには、3つの押しボタンがあります。2つは外部割込みに接続することが可能で、1つはマイクロコントローラのリセット信号に接続されます。前項でLCDカウンタを使用して実際に示したように、リセットボタンを使用すると、アプリケーションの実行を再開することができます。

他の2つのボタンは、外部割込みに接続することができます(スイッチによって有効にされている場合)。各ボタンには、接続可能な1対の外部割込みがあります。押しボタン1 (評価キットボード上のSW4)は、ポート5のピン2 (外部割込み#10)またはポート5のピン3 (外部割込み#11)のいずれかに接続することができます。押しボタン2 (評価キットボード上のSW5)は、ポート7のピン0 (外部割込み#14)またはポート7のピン1 (外部割込み#15)のいずれかに接続することができます。次の表は、押しボタンを外部割込みピンに接続するために使うことのできるスイッチを示しています。

スイッチ(オンに設定) 押しボタン 接続先のポートピン 外部割込み#
SW6、スイッチ2 押しボタン1 (SW4) ポート5のピン2 10
SW6、スイッチ3 押しボタン1 (SW4) ポート5のピン3 11
SW6、スイッチ4 押しボタン2 (SW5) ポート7のピン0 14
SW6、スイッチ5 押しボタン2 (SW5) ポート7のピン1 15

これらのピンには、代替機能があることに留意してください。これは、押しボタンに接続可能な外部割込みを選択することができるようにするためです。たとえば、ポート7のピン0と1は、UART 0のシリアルポートの送信ラインと受信ラインに使用されます。これらの1つに押しボタンを接続した場合、UART 0機能を使用することは難しくなります。MAXQ2000には2つのUARTがあることを思い出してください。つまり、MAXQ2000評価キットの構成を決定するときには、若干の選択の自由があるということです。

シリアルコネクタ

MAXQ2000評価キットには、9ピンシリアルコネクタとRS-232レベルコンバータが含まれています。したがって、標準のストレートスルー型のシリアルケーブルを使用して、評価キットとPC間を接続することができます。このケーブルは、小さい方のシリアル/JTAGボードに接続するために使用するシリアルケーブルと同じものです。

このシリアルポートを経由して着信データを読み取るためには、SW1のスイッチ番号3がオンの位置になければなりません。外部割込みを生成するためにピンP7.1を使用している場合(SW6.5がオンの場合)には、これによって衝突を起こすおそれがあります。また、このシリアルポートを経由してデータを書き込むためには、SW1のスイッチ番号7がオンの位置になければなりません。この場合も、外部割込みを生成するためにP7.0を使用している場合(SW6.4がオンの場合)には、これによって衝突を起こすおそれがあります。

LEDパネル

すでに、簡単なHelloWorldスタイルのアプリケーションでLEDパネルを使用しました。ここで、より詳しくパネルの内容を見てみましょう。図8は、LEDパネルと、その出力ピンに関連付けられた個々の光を示しています。

図8. LEDをMAXQ2000のレジスタビットに割り当て
図8. LEDをMAXQ2000のレジスタビットに割り当て

I/Oポートに値を書き込むためには、最初にポート0のピンの方向が出力となるように設定する必要があります。各ピンは、独立して入出力方向を制御することができます。最初のアプリケーションでは、次のコード行を使用して、ポート0のピンをすべて出力に設定します。
PD0 = 0xff;
該当するI/Oポートを出力に設定すると、PO0レジスタ内の該当するビットを1にセットしたときに、そのピンのLEDが点灯します。留意が必要ですが、スイッチバンクSW6上のスイッチ番号8は、LEDアレイに電力を供給するためにオン位置になければなりません。

MAX1407

MAXQ2000評価キットにはMAX1407が同梱されています。MAX1407には、4チャネルで16ビットのアナログ-ディジタルコンバータ(ADC)と、2つの10ビットのディジタル-アナログコンバータ(DAC)が搭載されています。MAXQ2000は、オンチップのSPI™マスタを通してMAX1407と通信します。このため、MAX1407は、MAXQ2000を外部の信号にインタフェース接続するための完ぺきなコンパニオンデバイスとなります。MAXQ2000評価キットとともにサーミスタを使用して現在の温度を表示するサンプルアプリケーションがオンラインにあります²。このアプリケーションを実行する上で必要となるハードウェア接続と構成の詳細については、このサンプルアプリケーションのソースコードを確認してください。

MAX1407のクイックビューデータシートを参照してください。

IARコンパイラを使用してアプリケーションをデバッグ

IARコンパイラを使用してアプリケーションをデバッグ それではここで、新しいアプリケーションに進んで、IARデバッグツールを紹介しましょう。以前と同様、新しいワークスペースとプロジェクトを作成します。ワークスペースの名前を「lcdtime」とし、プロジェクトの名前を「rtc_demo」とします。ここで、このアプリケーションノート用にソースダウンロードからソースファイルlcd_rtc.cを追加します³。DEBUGボタンを押すことによって、このアプリケーションを構築し、MAXQ2000評価キットにロードします。

このアプリケーションは、実際には、以前に作成したLCDカウンタのアプリケーションを拡張したものです。実行を開始すると、以前と同様の表示で、LCD上で高速にカウントが増えます。ただし、SW4ボタンを押すと、アプリケーションは実時間時計の現在値を表示します。ほとんどの場合、最初の時刻は間違っているため、役に立ちません。SW5ボタンを数回押すと、分が増えます。このボタンを押し続けることで時間も増やすことができますが、しばらく押すと指が疲れることでしょう。この場合は、SW5ボタンを押したままSW4ボタンを押して時間を増やしてください。再びSW4ボタンだけを押すと、元のカウンタ表示に切り替わります。

先に進みましょう。[GO]ボタン(3つの青色の矢印)をクリックして、このアプリケーションを実行します。アプリケーションの機能を把握するために、試しに少し操作してみてください。アプリケーションについて理解したら、これを使用してIARのデバッグツールのいくつかを紹介しましょう。

IARによるデバッグ:アプリケーションの一時停止

アプリケーションを実行した状態で、ツールバーの左側にある赤色の手のボタンを押します。代わりに、[DEBUG]メニューに進んで[BREAK]を選択してもかまいません。これによってプロセッサは停止し、IARはアプリケーション内の現在位置を表示します。

アプリケーションが一時停止の状態では、いくつかのオプションを利用することができます。デバッグツールバーの他のボタン(青色の矢印のある他のボタン)のうちのいくつかにマウスをかざすと、ボタンの機能を示すヒントウィンドウがポップアップ表示されます。役に立つボタンの一部を以下に示します。
  • [Step Over] (次の命令を飛び越える)
    次の命令が関数呼出しの場合、このボタンを押すと、デバッグを行うためにその関数の中に移動することはありません。
  • [Step Into] (次の命令の中に移動する)
    次の命令が関数呼出しの場合、このボタンを押すと、呼び出された関数の中に移動します。
  • [Run to Cursor] (カーソル位置まで実行)
    実行ステップがコード内の現在のカーソルの位置に達するまで、アプリケーションを実行します。これは、ブレークポイント機能を使用してコード内の特定ポイントまで実行するよりは、少し便利です。
  • [Go] (通常どおりアプリケーションを実行することができる)
    アプリケーションは、Pauseボタンを押すことによって停止することができます。あるいはブレークポイントに達すると停止します。

IARによるデバッグ:ブレークポイント

ブレークポイントによって、アプリケーションが特定の位置に達したときにアプリケーションを停止することができます。例でこれを示しましょう。まだ実行させているアプリケーションを停止します。コード内で関数pushButtonInterruptを見つけます。次に、以下の行を見つけます。
IF (EIF1 & 0x04)
この行を右クリックして、ポップアップメニューから、オプション[TOGGLE BREAKPOINT]を選択します(オプション[Toggle Bookmark]ではありません!)。赤色の「X」が、この行の左側の余白に表示されます。ここでもう一度DEBUGボタンを押します。次に、[GO]ボタンを押してアプリケーションを実行します。LCDカウンタが実行される様子がわかります。

SW5ボタンを押します。カウンタアプリケーションが静止したように見えます。IAR Embedded Workbenchを振り返って見ると、アプリケーションが停止されたことがわかります。図9に示すように、ブレークポイントを追加した行が強調表示されています。

図9. IAR Embedded Workbenchでブレークポイントを押す
図9. IAR Embedded Workbenchでブレークポイントを押す

ブレークポイントは、アプリケーションをデバッグする際に非常に役立つツールです。開発者はしばしば、コードが経路をきちんとたどっているのか、あるいは経路からそれているのかどうかを知りたいと考えています。たとえば、押しボタンの割込みルーチンが動作しなかった場合、2つの可能性を検討する必要があります。すなわち、1)押しボタンの割込みルーチンのコードを間違って記述したため、想定した動作が見られなかった、あるいは、2)押しボタンの割込みコードがまったく実行されなかった。ブレークポイントを使用すると、2番のケースであったかどうかを明らかにすることができます。これによって、デバッグ作業の注力すべき箇所を判断することができるようになります。

IARによるデバッグ:ローカル変数

アプリケーションがまだブレークポイントにある状態で、[LOCALS]ウィンドウを開きます(まだ開いていない場合)。このウィンドウは、[VIEW]メニューの下で[LOCALS]オプションを選択することで開くことができます。以前にブレークポイントを設定した行で一時停止している場合、[LOCALS]ウィンドウは、次のようになります。

図10. IAR Embedded Workbenchのローカル変数ウィンドウ
図10. IAR Embedded Workbenchのローカル変数ウィンドウ

2つの項目、tempとtimeに注目してください。temp変数は、PI7レジスタの値を表示するために使用されています。もう1つの項目timeが示す内容に留意してください。これは、変数が現在、範囲内にないことを示しています。つまり、変数に値がないか、値が関数で再び使用されることがないかのいずれかです。

[LOCALS]ウィンドウは、アプリケーションが一時停止した場所の関数の中で宣言されて使用された変数を示します。これは、アプリケーションの現在の状態を知るための強力なツールです。変数に予期しない値が存在するかどうかを検査することが可能で、また、変数の値に基づいてアプリケーションが次に進む場所を判断することができます。

[LOCALS]ウィンドウの機能はこれだけではありません。プログラムの実行の間、変数の値を変更することができます。tempの値(おそらく1)をクリックし、新しい整数値を入力します。これで、実行中のアプリケーションの状態を変更したことになります。これによって開発者は、アプリケーションを再構築して再ロードしなくても、いろいろな入力に対するアプリケーションの反応を調べることができます。

IARによるデバッグ:[WATCH]ウィンドウ

アプリケーションがまだ一時停止された状態で、[WATCH]ウィンドウを開きます([VIEW] [WATCH])。[Expression]の下でpbcountを入力します。値1が[WATCH]ウィンドウに表示されます(より多くのボタンを押して、アプリケーションを再び実行させない限り)。[Watch]ウィンドウによって、必要な任意の式を入力することが可能で、その式から求めた値が示されます。このケースでは、グローバル変数の名前を入力しているため、これによって押しボタンの割込みコードの入力回数を知ることができます。ただし、[WATCH]ウィンドウは、これよりも若干強力です。[WATCH]ウィンドウでpbcountをもう一度クリックし、代わりにpbcount ^ 0x05を入力します。IAR Embedded Workbenchは、この式の値を求め(pbcountの値と5の排他的論理和)、そして、結果(4)を表示します。

図11. IAR Embedded Workbenchで式を入力するための[WATCH]ウィンドウ
図11. IAR Embedded Workbenchで式を入力するための[WATCH]ウィンドウ

IARによるデバッグ:コールスタック

コールスタック([VIEW] [CALL STACK])を開きます。コールスタックは、コードが現在実行している位置に達するまでに呼び出された関数を示します。この時点では、割込みサービスを実施中であるため、pushButtonInterrupt()だけが(いくつかのデバッグ情報とともに)示されます。アプリケーションを少し進めてみましょう。そうすると、このウィンドウが動作していることがわかります。割込み15というラベルの付いたコードセグメントの下にある行showTime()まで進めます。これには、何度か[STEP OVER]を押して進めるか、あるいは行を右クリックして[RUN TO CURSOR]を選択します。これによって、行showTime()が強調表示されます。[STEP INTO]ボタンを押すと、showTime()関数の最初のコード行が強調表示されます。もう一度コールスタックを確認してみましょう。showTime()関数が1行目に表示され、その後にpushButtonInterrupt()が続いているのがわかります。これはスタックであるため、現在位置の関数が最初に表示され、その後に、呼び出した関数が続き、次にその関数を呼び出した関数が続く、といったふうになります。

図12. IAR Embedded Workbenchでのコールスタック
図12. IAR Embedded Workbenchでのコールスタック

IARによるデバッグ:[MEMORY]ウィンドウ

IAR Embedded Workbenchを使用すると、アプリケーションを実行しているデバイスのメモリを確認することもできます。[VIEW] → [MEMORY]を順に選択すると、[MEMORY]ウィンドウが表示されます。このウィンドウを初めて開いたときには、おそらくコードセグメントのメモリ内容が表示されます。ドロップダウンボックスをクリックすると、閲覧可能なメモリタイプのオプションが表示されます。[Data]オプションを選択すると、MAXQ2000のオンチップRAMの内容を閲覧することができます。

図13. IAR Embedded Workbenchでのメモリ内容の表示
図13. IAR Embedded Workbenchでのメモリ内容の表示

[LOCALS]ウィンドウの場合とまったく同様、ここでRAMの値をじかに変更することができます。確認したい項目を強調表示し、新しい16進値を入力します。これは、[LOCALS]ウィンドウの場合と同様、開発者にとって有効なツールで、アプリケーションを構築して再ロードしなくてもアプリケーションの状態を変更することができます。

IARによるデバッグ:[REGISTER]ウィンドウ

[REGISTER]ウィンドウは[MEMORY]ウィンドウとよく似ています([VIEW] [REGISTER])。このウィンドウは、MAXQ2000のレジスタマップを示します。表示される最初のレジスタは、MAXQプラットフォームのコアレジスタです(アキュムレータ、データポインタ、ループカウンタなど)。ドロップダウンボックスをクリックすると、他のいくつかのオプションが表示されます。たとえば、[Port I/O]レジスタを選択すると、MAXQ2000上の入力/出力ポートに関連付けられたすべてのレジスタを確認して編集することができます。

図14. IAR Embedded Workbenchでのレジスタ内容の表示
図14. IAR Embedded Workbenchでのレジスタ内容の表示

サポートオプション

MAXQプラットフォームをサポートするためのいくつかのオプションが用意されています。その1つとして、ダラスセミコンダクタの開発者が担当するオンラインディスカッションフォーラムがあります。ここには、ユーザが提示した質問に対する回答が掲載されています。これは、開発者のためのニュース放送局としての役割を果たし、利用可能な最新のツールに関する情報やその他の重要な問題に関する情報が記されています。以下のメインページにアクセスし、アカウントを登録してログインしてください(英語での対応となります)。

ダラスセミコンダクタディスカッションフォーラム
公開フォーラムに適していない質問については、マキシムのサポートセンターにてお問い合わせください。

一般的なニュースや情報について、またMAXQ2000、MAXQプラットフォーム、および将来のMAXQデバイスについての情報の起点として、MAXQホームページを参照してください。

トラブルシューティング

どのようなデバイスでも新しく開始する場合には、最初に通信しようとしたときに、一般的にいくつかの問題に出くわすことになります。ほとんどの問題は、このアプリケーションノートの最初の部分に記載した指示にしたがっているかどうかを確認することで解決することができます(基板の接続やプロジェクト構成など)。以下に、一般的ないくつかの問題と解決策を示します。

問題 可能な解決策
デバッグを開始すると、IARはまったく問題を示しませんが、MAXQ2000のハードウェアは何も実行していません。 [C-SPY Debugger]のプロジェクトオプションの下で、[JTAG]ドライバを選択していることを確認してください。
不正な*.d66ファイルについてのエラーメッセージが表示されます。 [XLINK] → [Include]オプションの下で、デフォルトのXCLファイルをlnkmaxq200x.xclファイルで置き換えることを選択しているかどうかを確認してください。
すべてを正しく構成しましたが、[DEBUG]ボタンを押してもアプリケーションをロードすることができません。 他のいずれのソフトウェアも、選択したCOMポートを使用していないことを確認してください。ほとんどの場合、PDAソフトウェアは、コンピュータを立ち上げたときから、シリアルポートを占有します。別のCOMポートを選択するか、あるいはPDAソフトウェアをオフにしてください。
IARは、アプリケーションのロードを開始しようとしますが、成功しません。ケーブルや構成はすべて問題ありません。 IAR Embedded Workbenchの再起動を試してください。

MAXQ2000へのアプリケーションのロードに関する、上記およびその他の問題については、画面の一番下のメッセージウィンドウで[TOOL OUTPUT]タブを開くと役に立つ場合があります。ここに挙げられたメッセージによって、ロードが失敗した理由についての手がかりが得られる場合があります。

結論

MAXQ2000は、MAXQプラットフォームから導入されたダラスセミコンダクタの最初のデバイスであり、民生アプリケーションのための数多くの周辺サポートを備えた、強力で低コストな低電力マイクロコントローラです。IARのEmbedded Workbenchがサポートされているため、強力なツール類の助けを借りることで、複雑なアプリケーションをCで記述しデバッグすることが可能となり、製品化までの時間を短縮し、高品質な製品を生み出しています。

関連するリンク
¹ このファイルは、自動的に開くディレクトリ内にあるはずです。自動的に開かなければ、[Program Files] [IAR Systems] [Embedded Workbench 3.2/MAXQ/config]に移動して、このファイルを選択します。
² サーミスタのサンプルアプリケーションをダウンロード
³ このアプリケーションノートのソースコードをダウンロード

次のステップ
EE-Mail EE-Mail配信の登録申し込みをして、興味のある分野の最新ドキュメントに関する自動通知を受け取る。
© , Maxim Integrated Products, Inc.
このウェブサイトのコンテンツは米国および各国の著作権法によって保護されています。コンテンツの複製を希望される場合は お問い合わせください。.
APP 3378:
アプリケーションノート 3378,AN3378, AN 3378, APP3378, Appnote3378, Appnote 3378