teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

6

追記

2021/03/05 03:04

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -44,4 +44,11 @@
44
44
  esp32-hal-uart.c内の
45
45
  `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
46
46
  ~~`UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと~~
47
- `uartDetachRx(uart, rxPin);`をコメントアウトしたら`loop()`に到達できました。
47
+ `uartDetachRx(uart, rxPin);`をコメントアウトしたら`loop()`に到達できました。
48
+
49
+ `uartDetachRx`内の`pinMatrixInDetach`関数が、
50
+ 1.0.4では`pinMatrixInDetach(UART_RXD_IDX(uart->num), false, false);`
51
+ 1.0.5では`pinMatrixInDetach(rxPin, false, false);`
52
+ になっていました
53
+ 1.0.4の表現に戻すと`loop()`に到達できました。
54
+ `pinMatrixInDetach`の引数を1.0.5で間違えた?

5

shuusei

2021/03/05 03:03

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -43,4 +43,5 @@
43
43
  その後処理を追っていったところ
44
44
  esp32-hal-uart.c内の
45
45
  `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
46
- `UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと
46
+ ~~`UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと~~
47
+ `uartDetachRx(uart, rxPin);`をコメントアウトしたら`loop()`に到達できました。

4

修正

2021/03/05 02:46

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -43,4 +43,4 @@
43
43
  その後処理を追っていったところ
44
44
  esp32-hal-uart.c内の
45
45
  `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
46
- `UART_MUTEX_LOCK()`あたりで処理止まっているように見えまた。
46
+ `UART_MUTEX_LOCK()`がdo-whileループになっているんで怪いんじゃないかなーと

3

追記

2021/03/05 02:30

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -36,4 +36,11 @@
36
36
  ```
37
37
  [V][HardwareSerial.cpp:105] end(): pins 17 16
38
38
  ```
39
- というログもきちんと出ています。
39
+ というログもきちんと出ています。
40
+
41
+ ---
42
+
43
+ その後処理を追っていったところ
44
+ esp32-hal-uart.c内の
45
+ `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
46
+ `UART_MUTEX_LOCK()`あたりで処理が止まっているように見えました。

2

更に追記

2021/03/05 02:24

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -26,4 +26,14 @@
26
26
  }
27
27
  ```
28
28
 
29
- としても止まりました。
29
+ としても止まりました。
30
+
31
+ ---
32
+
33
+ HardwareSerialは3つ(Serial0, 1, 2)存在するので、`Serial2`でbeginを2回よび、なにかログが出ないか見てみました。
34
+
35
+ この場合は正常動作し、
36
+ ```
37
+ [V][HardwareSerial.cpp:105] end(): pins 17 16
38
+ ```
39
+ というログもきちんと出ています。

1

tuiki

2021/03/05 02:05

投稿

ozwk
ozwk

スコア13553

answer CHANGED
@@ -1,4 +1,29 @@
1
1
  1.0.4では正常に動作
2
2
  1.0.5では問題の再現を確認しました
3
3
 
4
- Core debug levelを`Verbose`にしてみましたが特に出力に変わったところはなく。
4
+ Core debug levelを`Verbose`にしてみましたが特に出力に変わったところはなく。
5
+
6
+ ---
7
+
8
+ [arduino-esp32/HardwareSerial.cpp at master · espressif/arduino-esp32 · GitHub](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/HardwareSerial.cpp)
9
+
10
+ を読む限り2回めのbegin()ではend()が呼ばれるようなので、
11
+
12
+ ```arduino
13
+ void setup() {
14
+ Serial.begin(115200);
15
+ Serial.println(__LINE__);
16
+ delay(10);
17
+ Serial.end();
18
+ pinMode(2, OUTPUT);
19
+ }
20
+
21
+ void loop() {
22
+ digitalWrite(2,HIGH);
23
+ delay(500);
24
+ digitalWrite(2,LOW);
25
+ delay(500);
26
+ }
27
+ ```
28
+
29
+ としても止まりました。