Skip to content

Commit e1ce867

Browse files
committed
[utest][drivers][serial_v2] 测试例程进行优化
1 parent bf558ac commit e1ce867

File tree

3 files changed

+127
-12
lines changed

3 files changed

+127
-12
lines changed

examples/utest/testcases/drivers/serial_v2/uart_flush_rx.c

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,26 @@ static rt_err_t uart_find(void)
3131
return RT_EOK;
3232
}
3333

34-
static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t size)
34+
static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t send_size)
3535
{
36-
rt_device_write(&serial->parent, 0, uart_write_buffer, size);
37-
rt_thread_mdelay(size * 0.0868 + 5);
36+
rt_uint8_t readBuf[16] = {0};
37+
rt_uint32_t readSize = 0;
38+
if (send_size >= sizeof(readBuf))
39+
{
40+
readSize = sizeof(readBuf);
41+
}
42+
else
43+
{
44+
readSize = send_size;
45+
}
46+
47+
rt_ssize_t size = rt_device_write(&serial->parent, 0, uart_write_buffer, send_size);
48+
if (size != send_size)
49+
{
50+
LOG_E("size [%4d], send_size [%4d]", size, send_size);
51+
return -RT_ERROR;
52+
}
53+
rt_thread_mdelay(send_size * 0.0868 + 5);
3854
if (1 != rt_device_read(&serial->parent, 0, uart_write_buffer, 1))
3955
{
4056
LOG_E("read failed.");
@@ -48,6 +64,25 @@ static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t size)
4864
return -RT_ERROR;
4965
}
5066

67+
/* Resend the data and check for any discrepancies upon reception */
68+
if (readSize > 0)
69+
{
70+
rt_device_write(&serial->parent, 0, uart_write_buffer, readSize);
71+
rt_thread_mdelay(readSize * 0.0868 + 5);
72+
rt_device_read(&serial->parent, 0, readBuf, readSize);
73+
74+
for (rt_uint32_t i = 0; i < readSize; i++)
75+
{
76+
if (readBuf[i] != uart_write_buffer[i])
77+
{
78+
LOG_E("index: %d, Read Different data -> former data: %x, current data: %x.", i, uart_write_buffer[i], readBuf[i]);
79+
return -RT_ERROR;
80+
}
81+
}
82+
}
83+
84+
LOG_I("flush rx send_size [%4d]", send_size);
85+
5186
return RT_EOK;
5287
}
5388

@@ -81,6 +116,10 @@ static rt_bool_t uart_api()
81116
rt_uint8_t *uart_write_buffer;
82117
rt_uint32_t i;
83118
uart_write_buffer = (rt_uint8_t *)rt_malloc(sizeof(rt_uint8_t) * (RT_SERIAL_TC_TXBUF_SIZE * 5 + 1));
119+
for (rt_uint32_t count = 0; count < sizeof(rt_uint8_t) * (RT_SERIAL_TC_TXBUF_SIZE * 5 + 1); count++)
120+
{
121+
uart_write_buffer[count] = count;
122+
}
84123

85124
srand(rt_tick_get());
86125
for (i = 0; i < RT_SERIAL_TC_SEND_ITERATIONS; i++)

examples/utest/testcases/drivers/serial_v2/uart_flush_txb.c

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,18 +37,34 @@ static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t send_size)
3737
rt_tick_t tick_diff;
3838
rt_tick_t expect_time = send_size * 0.0868;
3939

40+
rt_uint8_t readBuf[16] = {0};
41+
rt_uint32_t readSize = 0;
42+
if (send_size >= sizeof(readBuf))
43+
{
44+
readSize = sizeof(readBuf);
45+
}
46+
else
47+
{
48+
readSize = send_size;
49+
}
50+
4051
/* In interrupt mode, ticks may be inaccurate; compensation should be applied*/
4152
if (send_size > 384)
4253
{
4354
expect_time -= send_size / 384;
4455
}
4556

46-
old_tick = rt_tick_get();
47-
rt_device_write(&serial->parent, 0, uart_write_buffer, send_size);
57+
old_tick = rt_tick_get();
58+
rt_ssize_t size = rt_device_write(&serial->parent, 0, uart_write_buffer, send_size);
59+
if (size != send_size)
60+
{
61+
LOG_E("size [%4d], send_size [%4d]", size, send_size);
62+
return -RT_ERROR;
63+
}
4864
rt_device_control(&serial->parent, RT_SERIAL_CTRL_TX_FLUSH, RT_NULL);
4965
tick_diff = rt_tick_get() - old_tick;
5066

51-
if (tick_diff < expect_time || tick_diff > expect_time + 10)
67+
if (tick_diff < expect_time || tick_diff > (expect_time + 10))
5268
{
5369
LOG_E("send_size [%4d], time required for TXB mode transmission to complete [%3d], expect_time [%3d]", send_size, tick_diff, expect_time);
5470
return -RT_ERROR;
@@ -58,6 +74,24 @@ static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t send_size)
5874
LOG_I("send_size [%4d], time required for TXB mode transmission to complete [%3d], expect_time [%3d]", send_size, tick_diff, expect_time);
5975
}
6076

77+
/* Resend the data and check for any discrepancies upon reception */
78+
if (readSize > 0)
79+
{
80+
rt_device_control(&serial->parent, RT_SERIAL_CTRL_RX_FLUSH, RT_NULL);
81+
rt_device_write(&serial->parent, 0, uart_write_buffer, readSize);
82+
rt_device_read(&serial->parent, 0, readBuf, readSize);
83+
84+
for (rt_uint32_t i = 0; i < readSize; i++)
85+
{
86+
if (readBuf[i] != uart_write_buffer[i])
87+
{
88+
LOG_E("index: %d, Read Different data -> former data: %x, current data: %x.", i, uart_write_buffer[i], readBuf[i]);
89+
return -RT_ERROR;
90+
}
91+
}
92+
}
93+
94+
6195
return RT_EOK;
6296
}
6397

@@ -81,7 +115,7 @@ static rt_bool_t uart_api()
81115
#endif
82116
rt_device_control(&serial->parent, RT_DEVICE_CTRL_CONFIG, &config);
83117

84-
result = rt_device_open(&serial->parent, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING);
118+
result = rt_device_open(&serial->parent, RT_DEVICE_FLAG_RX_BLOCKING | RT_DEVICE_FLAG_TX_BLOCKING);
85119
if (result != RT_EOK)
86120
{
87121
LOG_E("Open uart device failed.");
@@ -90,8 +124,12 @@ static rt_bool_t uart_api()
90124

91125
rt_uint8_t *uart_write_buffer;
92126
rt_uint32_t i;
93-
rt_int32_t tx_timeout = 1;
127+
rt_int32_t tx_timeout = 10 * 1000;
94128
uart_write_buffer = (rt_uint8_t *)rt_malloc(sizeof(rt_uint8_t) * (RT_SERIAL_TC_TXBUF_SIZE * 5 + 10));
129+
for (rt_uint32_t count = 0; count < sizeof(rt_uint8_t) * (RT_SERIAL_TC_TXBUF_SIZE * 5 + 10); count++)
130+
{
131+
uart_write_buffer[count] = count;
132+
}
95133

96134
rt_device_control(&serial->parent, RT_SERIAL_CTRL_SET_TX_TIMEOUT, (void *)&tx_timeout);
97135

examples/utest/testcases/drivers/serial_v2/uart_flush_txnb.c

Lines changed: 42 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,35 @@ static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t send_size)
3636
rt_uint32_t old_tick;
3737
rt_tick_t tick_diff;
3838
rt_tick_t expect_time = send_size * 0.0868;
39+
rt_uint8_t readBuf[16] = {0};
40+
rt_uint32_t readSize = 0;
41+
if (send_size >= sizeof(readBuf))
42+
{
43+
readSize = sizeof(readBuf);
44+
}
45+
else
46+
{
47+
readSize = send_size;
48+
}
3949

4050
/* In interrupt mode, ticks may be inaccurate; compensation should be applied */
4151
if (send_size > 384)
4252
{
4353
expect_time -= send_size / 384;
4454
}
4555

46-
old_tick = rt_tick_get();
47-
rt_uint32_t size = rt_device_write(&serial->parent, 0, uart_write_buffer, send_size);
56+
old_tick = rt_tick_get();
57+
rt_ssize_t size = rt_device_write(&serial->parent, 0, uart_write_buffer, send_size);
58+
if (size != send_size)
59+
{
60+
LOG_E("size [%4d], send_size [%4d]", size, send_size);
61+
return -RT_ERROR;
62+
}
63+
4864
rt_device_control(&serial->parent, RT_SERIAL_CTRL_TX_FLUSH, RT_NULL);
4965
tick_diff = rt_tick_get() - old_tick;
50-
if (tick_diff < expect_time)
66+
67+
if (tick_diff < expect_time || tick_diff > (expect_time + 10))
5168
{
5269
LOG_E("send_size [%4d], time required for TXNB mode transmission to complete [%3d], expect_time [%3d]", send_size, tick_diff, expect_time);
5370
return -RT_ERROR;
@@ -57,6 +74,23 @@ static rt_err_t test_item(rt_uint8_t *uart_write_buffer, rt_uint32_t send_size)
5774
LOG_I("send_size [%4d], time required for TXNB mode transmission to complete [%3d], expect_time [%3d]", send_size, tick_diff, expect_time);
5875
}
5976

77+
/* Resend the data and check for any discrepancies upon reception */
78+
if (readSize > 0)
79+
{
80+
rt_device_control(&serial->parent, RT_SERIAL_CTRL_RX_FLUSH, RT_NULL);
81+
rt_device_write(&serial->parent, 0, uart_write_buffer, readSize);
82+
rt_device_read(&serial->parent, 0, readBuf, readSize);
83+
84+
for (rt_uint32_t i = 0; i < readSize; i++)
85+
{
86+
if (readBuf[i] != uart_write_buffer[i])
87+
{
88+
LOG_E("index: %d, Read Different data -> former data: %x, current data: %x.", i, uart_write_buffer[i], readBuf[i]);
89+
return -RT_ERROR;
90+
}
91+
}
92+
}
93+
6094
return RT_EOK;
6195
}
6296

@@ -80,7 +114,7 @@ static rt_bool_t uart_api()
80114
#endif
81115
rt_device_control(&serial->parent, RT_DEVICE_CTRL_CONFIG, &config);
82116

83-
result = rt_device_open(&serial->parent, RT_DEVICE_FLAG_RX_NON_BLOCKING | RT_DEVICE_FLAG_TX_NON_BLOCKING);
117+
result = rt_device_open(&serial->parent, RT_DEVICE_FLAG_RX_BLOCKING | RT_DEVICE_FLAG_TX_NON_BLOCKING);
84118
if (result != RT_EOK)
85119
{
86120
LOG_E("Open uart device failed.");
@@ -91,6 +125,10 @@ static rt_bool_t uart_api()
91125
rt_uint32_t i;
92126
rt_int32_t tx_timeout = 1;
93127
uart_write_buffer = (rt_uint8_t *)rt_malloc(sizeof(rt_uint8_t) * (RT_SERIAL_TC_RXBUF_SIZE * 5 + 10));
128+
for (rt_uint32_t count = 0; count < sizeof(rt_uint8_t) * (RT_SERIAL_TC_TXBUF_SIZE * 5 + 10); count++)
129+
{
130+
uart_write_buffer[count] = count;
131+
}
94132

95133
rt_device_control(&serial->parent, RT_SERIAL_CTRL_SET_TX_TIMEOUT, (void *)&tx_timeout);
96134

0 commit comments

Comments
 (0)