Nios® II デバッグ手法シリーズ
このシリーズでは Nios® II プロセッサーのデバッグに役に立つ便利機能について紹介します。
Memory view の問題点
Nios® II Software Build Tools (SBT) for Eclipse の Debug Perspective には、Memory view がありますが、この機能は、byte_enable を持つメモリー等に対する参照、変更を行う事を主な目的としていますので、たとえ表示が 16 bit や 32 bit であっても、変更は 1 byte 単位で行われます。そのため byte_enable を持たない 8 bit を超えるレジスターを持つペリフェラル等のレジスターの変更に使う時は注意する必要があります。
また、Memory view はデフォルトで画面に表示できる範囲の値を読出し表示しますので、実装されていない領域にまでアクセスしてしまい、思わぬ動作不良を引き起こす場合があります。これについても注意する必要があります。
これらの事から、ペリフェラルのレジスターの変更は、gdb コマンドの使用をお勧めします。
[ Memory View ]
gdb コマンドによるレジスターの変更
Nios® II SBT では Console view から gdb コマンドによる操作ができます。
レジスターの値を参照する場合は下記のように入力します。
x/<数><xoducfa><bhwg> [アドレス]※1
※1 <>内は省略可能です。また組み合わせによってはエラーになる場合があります。
<xoducfa> | 表示形式 |
x | 16 進 |
o | 8 進 |
d | 符号付き 10 進 |
u | 符号なし 10 進 |
c | 文字 |
f | 浮動小数点 |
a | アドレス |
s | 文字列(null ターミネート) |
i | アセンブラー |
<bhwg> | bit 幅 |
b | 8 bit |
h | 16 bit |
w | 32 bit |
g | 64 bit |
例. 0x22000 番地から 12 ワード分のデータを16進で表示させます。1 ワードの bit 幅は 32 bit です。
レジスターの値を変更する場合は下記のように入力します。
set {[int,short,char・・・]}[アドレス]=[値]
例. 0x22000 番地に、32 bit の 0xAAAAAAAA を設定します。
その他の方法
Debug Perspective には、変数やメモリーの値を参照する機能として Memory view の他に Watch Expressions や Variables edit があります。
Watch Expressions はグローバル変数や式を参照するには有効です。アドレスを直接指定してレジスターの値を参照する事はできますが、変更する事ができません※2。
Variables edit は、Add Global Valiables を使うとグローバル変数の参照も変更も可能ですが、変数として定義されていないレジスタについては選択する事ができません。
※2 構造体や配列などのメンバーについては変更が可能な場合があります。
[ Watch Expressions ]
[ Variables edit ]
Memory view の表示量設定
Memory view において Table Rendarings の設定を変更する事で、不要な領域へのアクセスを抑える事ができます。
Memory view の右上の View Menu を開いて、 Table Rendarings Preferences... を選択します。
[ View Menu ]
Table Rendarings ウィンドウはデフォルトでは Automatic に設定されていますので、Manual に変更して表示する行数※3を設定してください。
[ Table Rendering ]
※3 ここで言う行数とは、16 byte を 1 行としています。
おすすめページ
弊社では Nios® II に関する各種情報とまとめた「Nios® II まとめページ」をご用意しております。本記事以外にも有用な情報が満載ですのでこちらも併せてご確認ください。