禺画像]
もう一度 Simulator で見てみよう。
どこを見ていいのかよく分からないが、とりあえずスタックポインタを見てみる。
あれ! ... 割り込みが入る度にスタックを消費している。
0x4000fe80
0x4000fe44
0x4000fe08
0x4000fdcc と 3C づつ消費していく
なるほど、そしてスタックが RAM 外に行ったところで完全暴走というわけか?
となると疑わしいのは Raisonance の Startup ということになる。
IRQHandler を見ると
ldr PC,=IRQ_Handler
プログラムカウンタに直接読み込んでいる。
この部分を
bl IRQ_Handler
にしてみよう。
再び Simulator でスタックを見る。大丈夫のようだ。
しかし、今度は Interrupt スタックを食いつぶしている。
他に触るところといえば割り込み関数の宣言だ
__attribute__ ((interrupt("IRQ"))) これを削除
再度 Simulator でスタックを見る。
大丈夫のようだ。
これが本来の使い方かどうかよく分からないが、しばらく様子を見よう。
Simulator のおかげで助かった。
でも、プログラム全体を追いかける気にはなれない。
環境: (Ride7 or μVision3) + GNU C + CQ-FRK-NXP-ARM
セコメントをする