9.picocalcへのファイル転送(FLASH書き込み)がハングアップしやすいのを対策
picocalのmicropython開発ではファイル転送とかにThonnyというツールを使うんだが、ファイルを uploadするとき頻繁にハングアップする。
FLASHの書き込み中にROMアクセスするとダメなのは経験してるんでドライバのソースをチェック。
2か所ほど怪しいところが見つかった。
1.terminalのカーソルを表示するところで周期timerを使ってる。
2.displayを更新するために core1 で5msスリープして更新するループが動いている。
じゃぁFLASHの書き込みをするときに止めればいいか。
Thonnyの書き込み開始を検出するか、ROMFSのアクセスでFLASH書き込み開始を検出しようか。
と思い、FLASH書き込み処理を調べるとコアを止めたり割り込み禁止したりする処理が既に組み込んである。
え?じゃぁなんで誤動作するの??
とドキュメントをよく読んでいくと core1 の処理内に、特定の関数を呼んでおく必要があるそうだ。
なるほど、早速関数を組み込んでみるか…
static void core1_main(void) {
//multicore_lockout_victim_init();
//static int frame = 0;
while (1) {
//if (++frame % 100 == 0) {
// printf("Core1 alive: %d\n", frame);
//}
はぁ?わけわかんね。なんでその関数を組み込んであるのに、わざわざコメントつけて無効にしてるの?
なにか理由があったのか?
やめろ!罠だ!
罠でもいい!罠でもいいんだッ!!
ということでコメント解除して試したらいい感じだった。