h_nari @ 熊本市のブログ。電子工作、プログラミング、ゲーム、TV、 政治、インターネットなどに日々の思い付きを、 うだうだ~と書いていきたい。
このブログにはコメント欄を設けておりません。 記事への御意見、ご質問はtwitter @h_nari宛に お願い致します。


アーカイブ


アマゾン・ベストセラー

メタ情報
RSS
Login

Serial.begin()を2回やるとダメな話

arduiono-esp32でlog_i()が使えるようになった と喜んでいたら、ある環境で使えない。

使える環境と比べつつ色々試した結果 Serial.begin()を2回呼び出すとlog_i()が 何も出力しなくなることがわかった。 この状態でも Serial.print()系は出力されるので わかりにくい。

Serial.begin()を2回呼び出すなんてしないだろうと 思うかも知らないが、例えば次の例では 2回呼び出されている。

void setup(void) {
    Serial.begin(115200);
    M5.init();
}

M5Stackを使っているとやりがち。 M5.init()でSerial.begin()が呼びだれている。 ちなみに第3引数にfalseを指定するとSerial.begin()の呼び出しは 抑制できる。

Serial.begin()を2回呼び出すとlog_i()というか それから呼び出されるets_printf()が出力されなくなる 理由だが、mutexがらみの問題かとは思うが 詳しくは調べていない。