回答編集履歴

6

追記

2021/03/05 03:04

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -91,3 +91,17 @@
91
91
  ~~`UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと~~
92
92
 
93
93
  `uartDetachRx(uart, rxPin);`をコメントアウトしたら`loop()`に到達できました。
94
+
95
+
96
+
97
+ `uartDetachRx`内の`pinMatrixInDetach`関数が、
98
+
99
+ 1.0.4では`pinMatrixInDetach(UART_RXD_IDX(uart->num), false, false);`
100
+
101
+ 1.0.5では`pinMatrixInDetach(rxPin, false, false);`
102
+
103
+ になっていました
104
+
105
+ 1.0.4の表現に戻すと`loop()`に到達できました。
106
+
107
+ `pinMatrixInDetach`の引数を1.0.5で間違えた?

5

shuusei

2021/03/05 03:03

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -88,4 +88,6 @@
88
88
 
89
89
  `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
90
90
 
91
- `UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと
91
+ ~~`UART_MUTEX_LOCK()`がdo-whileループになっているんで怪しいんじゃないかなーと~~
92
+
93
+ `uartDetachRx(uart, rxPin);`をコメントアウトしたら`loop()`に到達できました。

4

修正

2021/03/05 02:46

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -88,4 +88,4 @@
88
88
 
89
89
  `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
90
90
 
91
- `UART_MUTEX_LOCK()`あたりで処理止まっているように見えまた。
91
+ `UART_MUTEX_LOCK()`がdo-whileループになっているんで怪いんじゃないかなーと

3

追記

2021/03/05 02:30

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -75,3 +75,17 @@
75
75
  ```
76
76
 
77
77
  というログもきちんと出ています。
78
+
79
+
80
+
81
+ ---
82
+
83
+
84
+
85
+ その後処理を追っていったところ
86
+
87
+ esp32-hal-uart.c内の
88
+
89
+ `void uartEnd(uart_t* uart, uint8_t txPin, uint8_t rxPin)`内の
90
+
91
+ `UART_MUTEX_LOCK()`あたりで処理が止まっているように見えました。

2

更に追記

2021/03/05 02:24

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -55,3 +55,23 @@
55
55
 
56
56
 
57
57
  としても止まりました。
58
+
59
+
60
+
61
+ ---
62
+
63
+
64
+
65
+ HardwareSerialは3つ(Serial0, 1, 2)存在するので、`Serial2`でbeginを2回よび、なにかログが出ないか見てみました。
66
+
67
+
68
+
69
+ この場合は正常動作し、
70
+
71
+ ```
72
+
73
+ [V][HardwareSerial.cpp:105] end(): pins 17 16
74
+
75
+ ```
76
+
77
+ というログもきちんと出ています。

1

tuiki

2021/03/05 02:05

投稿

ozwk
ozwk

スコア13551

test CHANGED
@@ -5,3 +5,53 @@
5
5
 
6
6
 
7
7
  Core debug levelを`Verbose`にしてみましたが特に出力に変わったところはなく。
8
+
9
+
10
+
11
+ ---
12
+
13
+
14
+
15
+ [arduino-esp32/HardwareSerial.cpp at master · espressif/arduino-esp32 · GitHub](https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/HardwareSerial.cpp)
16
+
17
+
18
+
19
+ を読む限り2回めのbegin()ではend()が呼ばれるようなので、
20
+
21
+
22
+
23
+ ```arduino
24
+
25
+ void setup() {
26
+
27
+ Serial.begin(115200);
28
+
29
+ Serial.println(__LINE__);
30
+
31
+ delay(10);
32
+
33
+ Serial.end();
34
+
35
+ pinMode(2, OUTPUT);
36
+
37
+ }
38
+
39
+
40
+
41
+ void loop() {
42
+
43
+ digitalWrite(2,HIGH);
44
+
45
+ delay(500);
46
+
47
+ digitalWrite(2,LOW);
48
+
49
+ delay(500);
50
+
51
+ }
52
+
53
+ ```
54
+
55
+
56
+
57
+ としても止まりました。