CTS某个主机阻塞后重发

CTS到某个主机阻塞之后,出现积压
现象有以下3点:
(1) 前端监控显示
值班人员已经发现有未发送的文件积压了
(2)
/behb/cts/work_cts/dist/process在这个目录发现有文件,说明已经积压了。
(3)这里写图片描述
查看Eimon.log,发现有积压

需要进行重发处理
发现未发数多余未到数,在排除DI问题后,可以判断是积压了。

在/home/cts/Bin目录下有redist进程,执行如下命令,可以优先保障到北京的数据重新发送。
./redist /behb/cts/work_cts/dist/process/20161222/10/babj001

# stty -F /dev/ttyS1 speed 4000000 baud; line = 0; intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 1; -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo;// 状态标志 bool has_valid_data = FALSE; // 是否有合法的历史帧 bool sbusLinked = FALSE; // 是否已建立链路 uint32_t no_data_count = 0; // 无新数据计数器(单位:7ms) const uint32_t MAX_NO_DATA_COUNT = 142; // ≈142 * 7ms = 994ms ≈1s uint8_t last_valid_sbus[25] = {0}; // 存储最后一帧有效数据 printf(“******* SBUS_SEND_thread STARTED **********\n”); gettimeofday(&tLastTime, NULL); while (1) { // === 1. 获取当前时间,计算是否到达 7ms 周期 === gettimeofday(&tCurTime, NULL); timeout = (tCurTime.tv_sec - tLastTime.tv_sec) * 1000 + (tCurTime.tv_usec - tLastTime.tv_usec) / 1000; if (timeout >= 7) { const uint8_t frame_to_send = NULL; // === 2. 检查是否有新数据,并更新 last_valid_sbus === pthread_mutex_lock(&sbubs_mutex); if (sbus_data_ready) { // 有新数据:优先使用 memcpy(last_valid_sbus, S_BUS, sizeof(S_BUS)); has_valid_data = TRUE; no_data_count = 0; // 重置超时计数 if (!sbusLinked) { sbusLinked = TRUE; printf(“SBUS link established.\n”); } frame_to_send = S_BUS; sbus_data_ready = FALSE; } else { // 无新数据:尝试重发 last frame if (has_valid_data && no_data_count < MAX_NO_DATA_COUNT) { frame_to_send = last_valid_sbus; } // 否则:不发送任何内容 } pthread_mutex_unlock(&sbubs_mutex); // === 3. 执行发送决策(单一出口)=== if (frame_to_send != NULL) { ret = UART_Write(sbus_fd, (const char)frame_to_send, 25); if (ret < 0) { printf(“UART_Write failed!\n”); } else { // struct tm *tm_info; // char time_buffer[26]; // struct timeval tv; // gettimeofday(&tv, NULL); // tm_info = localtime(&tv.tv_sec); // strftime(time_buffer, 26, “%Y-%m-%d %H:%M:%S”, tm_info); // printf(“[%s.%06ld] SBUS send: %s (%d bytes)\n”, // time_buffer, tv.tv_usec, // (frame_to_send == S_BUS) ? “NEW” : “REPEAT”, // ret); } // 成功发送后递增计数(用于控制重发次数) no_data_count++; } else { // === 4. 超时处理 === if (no_data_count == MAX_NO_DATA_COUNT) { struct timeval tv; gettimeofday(&tv, NULL); printf(“[%ld.%06ld] SBUS TIMEOUT: No valid input for 1 second. Stopping output.\n”, tv.tv_sec, tv.tv_usec); sbusLinked = FALSE; has_valid_data = FALSE; } no_data_count++; // 继续递增直到超限 } // === 5. 统一重置定时器 === gettimeofday(&tLastTime, NULL); } else { usleep(1000); } } return NULL;为什么这个挂测20分钟就出现了726ms没有SBUS数据输出,726ms后连续粘包;uart设置 O_NONBLOCK了,加的打印日志最后看到的这个726ms无数据输出时uart_write返回的是25,一直打印正常,而且中途没有726ms没有打印的情况
11-29
CTS(Compatibility Test Suite)测试框架中,运行单个指定的测试用例可以通过命令行工具结合特定参数来实现。以下是具体操作步骤: ### 指定运行单个测试用例的方法 1. **使用 `--test` 参数** 在 CTS 命令行中,可以通过 `--test` 参数指定要运行的测试用例。格式为 `包名.类名#方法名`,例如: ```bash run cts --test android.example.test.package.TestCaseClass#testMethodName ``` 这种方式可以精确控制仅执行指定的测试方法,适用于调试或验证某个具体功能是否通过测试。 2. **结合模块名称运行测试用例** 如果测试用例属于某个特定模块,可以结合模块名和测试用例名称一起指定: ```bash run cts -m AndroidExampleModule --test android.example.test.package.TestCaseClass#testMethodName ``` 这里 `-m` 用于指定模块名称,确保测试框架只在该模块中查找并运行指定的测试用例。 3. **通过 `--plan` 参数使用测试计划文件** CTS 支持通过测试计划文件(.xml)来定义需要运行的测试用例集合。可以手动创建一个包含单个测试用例的计划文件,然后运行: ```bash run cts --plan example-plan ``` 其中 `example-plan.xml` 文件内容如下: ```xml <TestPlan name="example-plan"> <TestEntry> <TestPackage name="android.example.test.package" /> <TestClass name="android.example.test.package.TestCaseClass" /> <TestMethod name="testMethodName" /> </TestEntry> </TestPlan> ``` 这种方式适用于需要重复运行特定测试用例的场景。 4. **中断测试与报告生成的注意事项** 在 CTS4.1 中,如果测试过程中按 `Ctrl+C` 终止进程,测试报告将无法生成,并且无法继续未完成的测试计划。因此建议在运行单个测试用例时保持测试流程完整,以确保报告生成和结果记录的完整性[^1]。 ### 示例:运行单个测试用例 假设要运行的测试用例为 `android.example.test.package.TestCaseClass#testMethodName`,可使用如下命令: ```bash run cts --test android.example.test.package.TestCaseClass#testMethodName ``` 如果该用例属于模块 `android.example.module`,则命令为: ```bash run cts -m android.example.module --test android.example.test.package.TestCaseClass#testMethodName ``` ### 日志与调试建议 在运行单个测试用例时,建议通过查看 CTS 的日志输出来跟踪测试执行情况。日志通常会显示测试用例的执行状态、错误信息以及失败原因。根据日志提示,可以快速定位问题并进行调试[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值