Skip to content

Commit 2341ba0

Browse files
authored
Merge pull request #4809 from KyleChenjh/serial_v2_tc
[testcase] 增加serial_v2的测试用例
2 parents 8a23d0c + 3127536 commit 2341ba0

File tree

9 files changed

+1212
-0
lines changed

9 files changed

+1212
-0
lines changed

examples/utest/testcases/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ if RT_USING_UTESTCASES
99

1010
source "$RTT_DIR/examples/utest/testcases/utest/Kconfig"
1111
source "$RTT_DIR/examples/utest/testcases/kernel/Kconfig"
12+
source "$RTT_DIR/examples/utest/testcases/drivers/serial_v2/Kconfig"
1213

1314
endif
1415

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# RT-Thread building script for bridge
2+
3+
import os
4+
from building import *
5+
6+
cwd = GetCurrentDir()
7+
objs = []
8+
list = os.listdir(cwd)
9+
10+
for d in list:
11+
path = os.path.join(cwd, d)
12+
if os.path.isfile(os.path.join(path, 'SConscript')):
13+
objs = objs + SConscript(os.path.join(d, 'SConscript'))
14+
15+
Return('objs')
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
menu "Utest Serial Testcase"
2+
3+
config UTEST_SERIAL_TC
4+
bool "Serial testcase"
5+
default n
6+
7+
endmenu
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
## 1、介绍
2+
3+
该目录下 c 文件是新版本串口的测试用例,在 `examples/utest/testcases/drivers/serial_v2` 目录结构里,该测试用例用来测试串口的各个操作模式是否正常工作。
4+
5+
## 2、 文件说明
6+
7+
| 文件 | 描述 |
8+
| ---------------- | ----------------------------------------- |
9+
| uart_rxb_txb.c | 串口接收阻塞和发送阻塞模式 的测试用例 |
10+
| uart_rxb_txnb.c | 串口接收阻塞和发送非阻塞模式 的测试用例 |
11+
| uart_rxnb_txb.c | 串口接收非阻塞和发送阻塞模式 的测试用例 |
12+
| uart_rxnb_txnb.c | 串口接收非阻塞和发送非阻塞模式 的测试用例 |
13+
14+
## 3、软硬件环境
15+
16+
硬件上需要支持 RT-Thread 的完整版操作系统,版本为4.0.4及以上,且硬件有串口硬件外设,软件上需要支持 内核接口、IPC 、Device 框架。
17+
18+
## 4、测试项
19+
20+
### 4.1 测试说明
21+
22+
上文所提及的模式是指串口使用时的操作模式,不涉及硬件的工作模式的配置情况(硬件工作模式一般有轮询POLL、中断INT、DMA),因此使用时需要结合具体的硬件工作模式去配置使用。例如 发送阻塞和接收非阻塞模式 ,这个测试有很多种硬件配置,配置情况例如:DMA发送阻塞和DMA接收非阻塞,INT发送阻塞和DMA接收非阻塞,POLL发送阻塞和DMA接收非阻塞等等。因此通过排列组合后的测试场景有4*9=36种,有意义的组合方式为20种。如下表:
23+
24+
25+
| 接收非阻塞 | 发送阻塞 | 组合 | 有意义的组合方式 |
26+
| ---------- | -------- | ----------------- | ---------------- |
27+
| POLL | POLL | RX_POLL + TX_POLL | |
28+
| | INT | RX_POLL + TX_INT | |
29+
| | DMA | RX_POLL + TX_DMA | |
30+
| INT | POLL | RX_INT + TX_POLL ||
31+
| | INT | RX_INT + TX_INT ||
32+
| | DMA | RX_INT + TX_DMA ||
33+
| DMA | POLL | RX_DMA + TX_POLL ||
34+
| | INT | RX_DMA + TX_INT ||
35+
| | DMA | RX_DMA + TX_DMA ||
36+
37+
| 接收非阻塞 | 发送非阻塞 | 组合 | 有意义的组合方式 |
38+
| ---------- | ---------- | ----------------- | ---------------- |
39+
| POLL | POLL | RX_POLL + TX_POLL | |
40+
| | INT | RX_POLL + TX_INT | |
41+
| | DMA | RX_POLL + TX_DMA | |
42+
| INT | POLL | RX_INT + TX_POLL | |
43+
| | INT | RX_INT + TX_INT ||
44+
| | DMA | RX_INT + TX_DMA ||
45+
| DMA | POLL | RX_DMA + TX_POLL | |
46+
| | INT | RX_DMA + TX_INT ||
47+
| | DMA | RX_DMA + TX_DMA ||
48+
49+
| 接收阻塞 | 发送阻塞 | 组合 | 有意义的组合方式 |
50+
| -------- | -------- | ----------------- | ---------------- |
51+
| POLL | POLL | RX_POLL + TX_POLL | |
52+
| | INT | RX_POLL + TX_INT | |
53+
| | DMA | RX_POLL + TX_DMA | |
54+
| INT | POLL | RX_INT + TX_POLL ||
55+
| | INT | RX_INT + TX_INT ||
56+
| | DMA | RX_INT + TX_DMA ||
57+
| DMA | POLL | RX_DMA + TX_POLL ||
58+
| | INT | RX_DMA + TX_INT ||
59+
| | DMA | RX_DMA + TX_DMA ||
60+
61+
| 接收阻塞 | 发送非阻塞 | 组合 | 有意义的组合方式 |
62+
| -------- | ---------- | ----------------- | ---------------- |
63+
| POLL | POLL | RX_POLL + TX_POLL | |
64+
| | INT | RX_POLL + TX_INT | |
65+
| | DMA | RX_POLL + TX_DMA | |
66+
| INT | POLL | RX_INT + TX_POLL | |
67+
| | INT | RX_INT + TX_INT ||
68+
| | DMA | RX_INT + TX_DMA ||
69+
| DMA | POLL | RX_DMA + TX_POLL | |
70+
| | INT | RX_DMA + TX_INT ||
71+
| | DMA | RX_DMA + TX_DMA ||
72+
73+
需要解释的是,为什么会存在无意义的组合模式,举个例子,非阻塞模式下,肯定是不会出现POLL(轮询)方式的,因为POLL方式已经表明是阻塞方式了。
74+
该测试用例在测试多种组合时,需要通过更改`rtconfig.h`文件对硬件模式进行静态配置。
75+
76+
### 4.2 测试思路
77+
78+
这四个测试用例的测试思路基本一致。
79+
80+
硬件上:**短接串口的发送TX引脚和接收RX引脚,完成自发自收的回路**
81+
82+
软件上:创建两个线程A和B,A为接收线程,B为发送线程,设置A线程优先级比B线程优先级高。发送线程发送随机长度(长度范围是 0 到 1000)的数据,接收线程接收到数据进行校验,数据正确则测试通过,默认测试100次。
83+
84+
## 5、配置
85+
86+
使用该测试用例需要在 `env` 工具的 `menuconfig` 中做相关配置,配置如下所示(使用 RT-Thread-Studio 的配置路径一致 ):
87+
88+
```
89+
RT-Thread Utestcases --->
90+
[*] RT-Thread Utestcases --->
91+
Utest Serial Testcase --->
92+
[*] Serial testcase
93+
```
94+
95+
## 6、使用
96+
97+
\- 编译下载。
98+
99+
\- 在 MSH 中输入 `utest_run testcases.drivers.uart_rxb_txb` 运行串口接收阻塞和发送阻塞测试用例。
100+
101+
\- 在 MSH 中输入 `utest_run testcases.drivers.uart_rxb_txb` 运行串口接收阻塞和发送阻塞测试用例。
102+
103+
\- 在 MSH 中输入 `utest_run testcases.drivers.uart_rxb_txb` 运行串口接收阻塞和发送阻塞测试用例。
104+
105+
\- 在 MSH 中输入 `utest_run testcases.drivers.uart_rxb_txb` 运行串口接收阻塞和发送阻塞测试用例。
106+
107+
如果仅仅配置了 `Serial testcase` 相关的测试用例,则直接输入 `utest_run` 运行即可将上述测试用例按序测试。
108+
109+
## 7、注意事项
110+
111+
\- 需配置正确的测试用例。
112+
113+
\- 如有需要,可开启 ULOG 查看测试用例日志信息。
114+
115+
\- 需在 MSH 中输入正确的命令行。
116+
117+
\- 测试用例默认的测试数据长度范围最大为1000字节,如果接收端的缓冲区大小配置为小于1000字节时,那么在测试接收阻塞模式时,将会由于获取不了1000字节长度导致线程持续阻塞(因为测试用例是按 `recv_len` 长度去接收的,而不是按照单字节去接收的),因此建议接收端的缓冲区大小 (对应宏例如为 `BSP_UART2_RX_BUFSIZE`)设置为1024即可;当然也可按需减小测试的最大数据长度。
118+
119+
\- 该测试用例需要结合硬件具体的工作模式(POLL 、INT、DMA)进行测试,而硬件工作模式只能选择一种,因此需要在 `rtconfig.h` 中对串口相应的宏进行配置,来选择不同的工作模式去进行测试。
120+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
Import('rtconfig')
2+
from building import *
3+
4+
cwd = GetCurrentDir()
5+
src = Split('''
6+
uart_rxb_txnb.c
7+
uart_rxb_txb.c
8+
uart_rxnb_txb.c
9+
uart_rxnb_txnb.c
10+
''')
11+
12+
CPPPATH = [cwd]
13+
14+
group = DefineGroup('utestcases', src, depend = ['UTEST_SERIAL_TC'], CPPPATH = CPPPATH)
15+
16+
Return('group')

0 commit comments

Comments
 (0)