地雷を踏んだ
構造体へのポインタ配列の表示を確認していて、とんでもない地雷を踏んでしまいました。orz
MPLAB-Xの構造体へのポインタ配列の表示方法はこんな感じでした。
(1)展開前はtest_arrayがTest*[16]タイプでAddressが0x300という表示
(2)展開するとtest_array[0]からtest_array[15]まで縦に表示
(3)配列要素を展開するとTest構造体のメンバを表示
DWARFのデータ構造をそのまま辿っているようです。ふむ、これで良いのか・・・
ん!
異変に気付きました。test_array[0]の値が0?
test_array[0]の指し示す構造体メンバが0と7d?
そしてさらにおかしなことが・・・
test_arra[0]にtest0構造体のアドレスをセットして・・・あれ0まま!
test_arra[1]にtest1構造体のアドレスをセットしても・・・0まま!
さらにステップ実行すると・・・えっ!
ここに飛ぶ???
(暫く錯乱状態に陥ったのですが割愛します)
原因はこれ(↓)でした。
struct Test *test_array[16] @0x300;
ポインタ変数が1バイトのときと2バイトになるときの条件を調べようとして、test_arrayの配置を0x300に設定して、この異変に遭遇しました。
こんな所に変数を配置する奴(<==愚か者)がいけない
XC8って、煩く文句をつけるくせに、こういうドジは黙ってスルーするイケズです。