M5StampS3でSakurIOのライブラリーで以下のエラーがでて再起動してしまう。
Guru Meditation Error: Core 1 panic'ed (IllegalInstruction). Exception was unhandled.
I2C通信している箇所でstartReceive()を呼び出して戻って来てないっぽい。
this->startReceive(reservedResponseLength+3); result = this->receiveByte();
startReceiveの終わりに"end startReceive"を出力する様にしたら出力されているのでここまでは実行されている様だ。
uint8_t SakuraIO_I2C::startReceive(uint8_t length){ dbg("requestForm="); dbgln(length); Wire.requestFrom((uint8_t)SAKURAIO_SLAVE_ADDR, length, (uint8_t)true); mode = MODE_READ; dbgln("end startReceive"); delay(100); }
あとは戻るだけなのでスタックに問題がありそう。
とここまで書いていて気づいた。
こちらでreturnがない時にとあって、startReceiveにはreturnがないではないか。 多分これか?
returnがないとスタックがずれちゃいそうだな。
M5StampPicoで使っていたときは問題なかったけど、レジスタの使い方やスタックの使い方の違いとかでたまたまうまく行ってただけの様だ。
PlatformIOの環境更新したら直るかと思って実行してしまった後で気づいて、更新が終わるまで2時間以上かかりそうなので、明日試す。
追記(1/6):
やっぱりreturn 追加したらクラッシュしなくなった。
一応pull request出した(*1)けどSakuraIOモジュール自体もう供給されてないので反映されるかは分からないのと、他にもWire.begin()しないようにしたりしたいので、今後はforkした自分のプロジェクトを使う事にする。
*1: masterブランチからpull request出してしまって後から追加した変更がpull requestにも追加されてしまったので一旦取り消した。