閑話 PicoSDKで使ったリソースの後始末
PicoCalc-micropython-driver のバグ対策です
micropython のソフトリセットでは、.dataや.bssの値が保存されてて初期化が中途半端というのは理解していたつもり。ハードウェアの設定もそのままなのも理解していたつもり。
でも理解したつもりなだけだった。
micropythonの管轄外で設定したハードウェアどころか、システムコールも後始末しないとダメなんだね。当たり前っちゃ当たり前。
今回わかった問題は2点。
1.vtterminal.c で設定したカーソル表示用インターバルタイマーが生きてるので、ソフトリセットを繰り返すとカーソル表示が怪しくなる。
2.picodisplay.c でLCD転送用のDMAチャネルを取得し続けるので、ソフトリセット回数がDMAチャネルの最大数(Pico2の場合は16)を超えるとハングアップする。
1の対策
インターバルタイマのコールバック関数内で大域変数をチェックして、特定の数値の場合にインターバルタイマを停止する。(コールバック関数の戻り値を false にする)
大域変数は初期化時にセットして、しばらく待つことにした。
2の対策
取得したDMAチャネルを大域変数(初期値 -1 )に保存する。初期化時に大域変数が -1 以外ならDMAチャネル取得済みなので、一旦解放してから取得する。
本日のバグレポートは以上となります。




