質問編集履歴
6
情報の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -67,7 +67,7 @@
|
|
67
67
|
//-------------------------------------------------------------------------------------
|
68
68
|
// 以下再追記
|
69
69
|
//-------------------------------------------------------------------------------------
|
70
|
-
|
70
|
+
通信処理部をメインループで行うようにすると、現象が起きなくなりました。シリアル通信をマルチタスクですると問題があるのかもしれません。
|
71
71
|
現象の原因はわからないのですが、もう少し様子を見て、問題なさそうならシングルタスクにして(ひとまず)解決にするのもアリかもしれません。
|
72
72
|
|
73
73
|
該当部のみ書き出した、現象確認用のソースを作成しました。
|
@@ -84,7 +84,7 @@
|
|
84
84
|
void USB_ReadTask(void* arg);
|
85
85
|
void UART_ReadTask(void* arg);
|
86
86
|
|
87
|
-
// ***
|
87
|
+
// *** USE_UARTReadTask をコメントアウトしていると、減少が発生しない
|
88
88
|
//#define USE_UARTReadTask
|
89
89
|
//#define USE_USBReadTask
|
90
90
|
|
5
情報の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -61,4 +61,133 @@
|
|
61
61
|
|
62
62
|
これらのデータが、以下のような間隔で送られてきています(黄色の縦線一つが上図のデータ全部相当)
|
63
63
|

|
64
|
-
およそ100ms強ほどの間隔で「送られてくるとき」「送られてこないとき」が切り替わり、「送られてくるとき」は最短15ms間隔ほどで数発送られてきます。
|
64
|
+
およそ100ms強ほどの間隔で「送られてくるとき」「送られてこないとき」が切り替わり、「送られてくるとき」は最短15ms間隔ほどで数発送られてきます。
|
65
|
+
|
66
|
+
|
67
|
+
//-------------------------------------------------------------------------------------
|
68
|
+
// 以下再追記
|
69
|
+
//-------------------------------------------------------------------------------------
|
70
|
+
別ラインのシリアル処理も同じタスクで処理していたのですが、両方をメインループで処理するようにすると、現象が起きなくなりました。シリアル通信をマルチタスクですると
|
71
|
+
現象の原因はわからないのですが、もう少し様子を見て、問題なさそうならシングルタスクにして(ひとまず)解決にするのもアリかもしれません。
|
72
|
+
|
73
|
+
該当部のみ書き出した、現象確認用のソースを作成しました。
|
74
|
+
```C++
|
75
|
+
#include <Arduino.h>
|
76
|
+
#include "comm.h"
|
77
|
+
#include <rom/rtc.h>
|
78
|
+
|
79
|
+
TaskHandle_t TaskUSB = NULL;
|
80
|
+
TaskHandle_t TaskUART = NULL;
|
81
|
+
const UByte RX2PortNo = 16;
|
82
|
+
const UByte TX2PortNo = 17;
|
83
|
+
|
84
|
+
void USB_ReadTask(void* arg);
|
85
|
+
void UART_ReadTask(void* arg);
|
86
|
+
|
87
|
+
// *** 両方コメントアウトしていると、減少が発生しない
|
88
|
+
//#define USE_UARTReadTask
|
89
|
+
//#define USE_USBReadTask
|
90
|
+
|
91
|
+
void setup() {
|
92
|
+
// put your setup code here, to run once:
|
93
|
+
SetupIO();
|
94
|
+
Serial.begin(115200, SERIAL_8N1);
|
95
|
+
Serial2.begin(115200, SERIAL_8N1, RX2PortNo, TX2PortNo);
|
96
|
+
// Serial2.setTimeout(10); // 読み取りタイムオーバー時間の設定:readuntil系で必要。
|
97
|
+
|
98
|
+
#ifdef USE_UARTReadTask
|
99
|
+
xTaskCreatePinnedToCore(UART_ReadTask, "UART_ReadTask", 4096, NULL, 10, &TaskUART, 0);
|
100
|
+
#endif
|
101
|
+
#ifdef USE_USBReadTask
|
102
|
+
xTaskCreatePinnedToCore(USB_ReadTask, "USB_ReadTask", 4096, NULL, 10, &TaskUSB, 0);
|
103
|
+
#endif
|
104
|
+
}
|
105
|
+
|
106
|
+
void UART_ReadTask(void* arg)
|
107
|
+
{
|
108
|
+
while (1)
|
109
|
+
{
|
110
|
+
char tmp[64]; // ESP32シリアル通信用の受信バッファは64バイトまで格納することが出来る
|
111
|
+
size_t readBts = 0;
|
112
|
+
|
113
|
+
int len = Serial2.available();
|
114
|
+
if (len > 0)
|
115
|
+
{
|
116
|
+
if (len > 64) {len = 64;}
|
117
|
+
readBts = Serial2.readBytes(tmp, len);
|
118
|
+
if (readBts)
|
119
|
+
{
|
120
|
+
DEB_OUT("\tIF < RW: ");
|
121
|
+
for (int i=0; i<readBts; i++)
|
122
|
+
{
|
123
|
+
Serial.write(tmp[i]);
|
124
|
+
DEB_OUT("%02X ", tmp[i]);
|
125
|
+
}
|
126
|
+
DEB_OUT("\n");
|
127
|
+
}
|
128
|
+
}
|
129
|
+
vTaskDelay(1);
|
130
|
+
}
|
131
|
+
}
|
132
|
+
|
133
|
+
void USB_ReadTask(void* arg)
|
134
|
+
{
|
135
|
+
while (1)
|
136
|
+
{
|
137
|
+
int len = Serial.available();
|
138
|
+
if(len)
|
139
|
+
{
|
140
|
+
for(int i=0;i<len;i++)
|
141
|
+
{
|
142
|
+
int ch = Serial.read();
|
143
|
+
Serial2.write(ch);
|
144
|
+
}
|
145
|
+
}
|
146
|
+
vTaskDelay(1); // delay(1);
|
147
|
+
}
|
148
|
+
}
|
149
|
+
|
150
|
+
void loop() {
|
151
|
+
int len;
|
152
|
+
// put your main code here, to run repeatedly:
|
153
|
+
if (digitalRead(SW_RD_TRIG) == 0)
|
154
|
+
{
|
155
|
+
digitalWrite(EN_POWER, 0);
|
156
|
+
}
|
157
|
+
#ifndef USE_UARTReadTask
|
158
|
+
//-------------------------------------------------------------------------------
|
159
|
+
// UART_ReadTask
|
160
|
+
len = Serial2.available();
|
161
|
+
char tmp[64]; // ESP32シリアル通信用の受信バッファは64バイトまで格納することが出来る
|
162
|
+
if (len > 0)
|
163
|
+
{
|
164
|
+
if (len > 64) {len = 64;}
|
165
|
+
size_t readBts = Serial2.readBytes(tmp, len);
|
166
|
+
if (readBts)
|
167
|
+
{
|
168
|
+
for (int i=0; i<readBts; i++)
|
169
|
+
{
|
170
|
+
// while(Serial.availableForWrite() == 0);
|
171
|
+
Serial.write(tmp[i]);
|
172
|
+
}
|
173
|
+
DEB_OUT("\n");
|
174
|
+
}
|
175
|
+
}
|
176
|
+
#endif
|
177
|
+
#ifndef USE_USBReadTask
|
178
|
+
//-------------------------------------------------------------------------------
|
179
|
+
// USB_ReadTask
|
180
|
+
len = Serial.available();
|
181
|
+
if(len)
|
182
|
+
{
|
183
|
+
for(int i=0;i<len;i++)
|
184
|
+
{
|
185
|
+
int ch = Serial.read();
|
186
|
+
// while(Serial.availableForWrite() == 0);
|
187
|
+
Serial2.write(ch);
|
188
|
+
}
|
189
|
+
}
|
190
|
+
//-------------------------------------------------------------------------------
|
191
|
+
#endif
|
192
|
+
}
|
193
|
+
```
|
4
情報の追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -56,7 +56,7 @@
|
|
56
56
|
以下が、この入れ替わった時の通信ラインの波形です。
|
57
57
|
入れ替わった時(上記 ID IS CHANGED を出力した時)に青いラインがハイになるようにして、直前の通信データを確認しています。
|
58
58
|

|
59
|
-
02 をスタートコードとしたフォーマットで、赤枠内のデータを収集するような動作を行っています。
|
59
|
+
02 をスタートコード、0D をエンドコードとしたフォーマットで、赤枠内のデータを収集するような動作を行っています。
|
60
60
|
デバッグ出力自体はこのフォーマット全体を出力しています。
|
61
61
|
|
62
62
|
これらのデータが、以下のような間隔で送られてきています(黄色の縦線一つが上図のデータ全部相当)
|
3
書式の改善、図の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -48,6 +48,8 @@
|
|
48
48
|
|
49
49
|
```
|
50
50
|
//-------------------------------------------------------------------------------------
|
51
|
+
// 以下追記
|
52
|
+
//-------------------------------------------------------------------------------------
|
51
53
|
GW期間中、PCを触れる環境でなく、ご回答、ご指摘いただいていながらお返事が遅くなり申し訳ございません。
|
52
54
|
デバッグ出力ですが、減少が起きた時のスクリーンショットが残っていました。
|
53
55
|

|
@@ -55,4 +57,8 @@
|
|
55
57
|
入れ替わった時(上記 ID IS CHANGED を出力した時)に青いラインがハイになるようにして、直前の通信データを確認しています。
|
56
58
|

|
57
59
|
02 をスタートコードとしたフォーマットで、赤枠内のデータを収集するような動作を行っています。
|
58
|
-
デバッグ出力自体はこのフォーマット全体を出力しています。
|
60
|
+
デバッグ出力自体はこのフォーマット全体を出力しています。
|
61
|
+
|
62
|
+
これらのデータが、以下のような間隔で送られてきています(黄色の縦線一つが上図のデータ全部相当)
|
63
|
+

|
64
|
+
およそ100ms強ほどの間隔で「送られてくるとき」「送られてこないとき」が切り替わり、「送られてくるとき」は最短15ms間隔ほどで数発送られてきます。
|
2
情報の更新
title
CHANGED
File without changes
|
body
CHANGED
@@ -46,4 +46,13 @@
|
|
46
46
|
}
|
47
47
|
}
|
48
48
|
|
49
|
-
```
|
49
|
+
```
|
50
|
+
//-------------------------------------------------------------------------------------
|
51
|
+
GW期間中、PCを触れる環境でなく、ご回答、ご指摘いただいていながらお返事が遅くなり申し訳ございません。
|
52
|
+
デバッグ出力ですが、減少が起きた時のスクリーンショットが残っていました。
|
53
|
+

|
54
|
+
以下が、この入れ替わった時の通信ラインの波形です。
|
55
|
+
入れ替わった時(上記 ID IS CHANGED を出力した時)に青いラインがハイになるようにして、直前の通信データを確認しています。
|
56
|
+

|
57
|
+
02 をスタートコードとしたフォーマットで、赤枠内のデータを収集するような動作を行っています。
|
58
|
+
デバッグ出力自体はこのフォーマット全体を出力しています。
|
1
コードの書き漏れを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
{
|
18
18
|
// ~~~ 略 ~~~
|
19
19
|
Serial.begin(115200, SERIAL_8N1);
|
20
|
+
Serial2.begin(115200, UART_CONF, RX2PortNo, TX2PortNo);
|
20
21
|
xTaskCreatePinnedToCore(UART_ReadTask, "UART_ReadTask", 4096, NULL, 10, &TaskUART, 0);
|
21
22
|
// ~~~ 略 ~~~
|
22
23
|
|