Network Transmit & Relay Retransmit

本文探讨了无线通信中节点的网络传输和中继重传策略。网络层的最大传输次数为8次,传输间隔在10到320毫秒之间。中继节点同样允许最大8次重传,同样遵循相同的间隔范围。值得注意的是,实际使用的间隔可能因承载限制而大于设定值,并且每次传输在链路层会加入随机延迟。

1. Network Transmit

transmission interval = (Network Retransmit Interval Steps + 1) * 10 (ms)

Network Transmit Count: 3 bits
Network Transmit Interval: 5 bits

For example, a value of 0b10000 represents a transmission interval between 170 and 180 milliseconds
between each transmission.

Note: A bearer (for example, the advertising bearer) may impose
restrictions on the set of intervals that it considers valid, and
therefore the interval used may be larger than the value of the state.

本节点发出的信息,网络层最大传输次数为8;传输间隔最小为10毫秒,最大为320毫秒。

2. Relay Retransmit

transmission interval = (Relay Retransmit Interval Steps + 1) * 10 (ms)

RelayTransmit Count: 3 bits
RelayTransmit Interval: 5 bits

Note: At the link layer, each transmission is perturbed by a random value from 0 to 10 milliseconds from the previous transmission.

Note: A bearer (for example, the advertising bearer) may impose restrictions on the set of intervals that it considers valid, and therefore the interval used may be larger than the value of the state.

中继节点收到的信息,最大传输次数为8;传输间隔最小为10毫秒,最大为320毫秒。

<think>这段代码是用于通过串口(UART6)向串口屏发送指令,实现垃圾类别名称的显示和语音播报功能。具体功能如下: 1. **显示垃圾类别名称**: - 发送指令:`data[uart3_rx.class]` 对应具体垃圾名称(如"塑料") - 发送指令:`data12` 对应垃圾类别名称(如"可回收垃圾") - 发送变量:`aa`(两位数字,用于更新显示计数) - 发送结束指令:`end`(指令结束标志) 2. **语音播报**: - 构造播放指令:`play_cmd`(格式为 `play 0,X,0`,X为音频编号) - 设置音频编号:`play_cmd[7]=0x32`(即字符'2',代表可回收垃圾的音频) - 发送完整播放指令:`HAL_UART_Transmit(&huart6, play_cmd, sizeof(play_cmd), HAL_MAX_DELAY)` 3. **存在问题**: - **指令重复发送**:播放指令被发送两次(完整指令13字节 + 前10字节),导致串口屏可能无法正确解析 - **冗余结束符**:额外发送了`end2`(0xFF,0xFF,0xFF),而播放指令已自带结束符 ### 代码问题分析 #### 1. 指令重复发送(严重错误) ```c HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, sizeof(play_cmd), HAL_MAX_DELAY); // 正确发送完整指令 HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, 10,0xFFFF); // 错误:重复发送前10字节 ``` #### 2. 多余结束符 ```c HAL_UART_Transmit(&huart6, (uint8_t *) end2, sizeof(end2),0xFFFF); // 多余操作 ``` #### 3. 硬编码延迟风险 使用`0xFFFF`作为超时参数可能导致任务阻塞(应使用`HAL_MAX_DELAY`或合理超时) ### 优化建议 #### 修正后的可回收垃圾分支 ```c // 显示垃圾名称和类别 HAL_UART_Transmit(&huart6, (uint8_t *) data[uart3_rx.class], strlen(data[uart3_rx.class]), HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *) data12, strlen(data12), HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *)aa, 2, HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *) end, sizeof(end), HAL_MAX_DELAY); // 语音播报(单次发送完整指令) play_cmd[7] = '2'; // 明确使用字符赋值 HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, sizeof(play_cmd), HAL_MAX_DELAY); break; //可回收垃圾 ``` ### 关键改进说明 1. **删除重复发送**:确保播放指令只发送一次完整格式 2. **移除多余结束符**:避免指令冲突 3. **统一超时处理**:使用`HAL_MAX_DELAY`防止任务阻塞 4. **明确字符赋值**:`play_cmd[7] = '2'` 替代十六进制值 ### 串口屏指令规范 | 指令组件 | 内容示例 | 说明 | |----------|----------|------| | 显示指令头 | `t0.txt="` | 设置文本框内容 | | 垃圾名称 | `塑料` | 具体垃圾名称 | | 类别名称 | `可回收垃圾` | 分类结果 | | 计数编号 | `12` | 显示序号 | | 显示结束符 | `"`+0xFF,0xFF,0xFF | 指令结束 | | 播放指令 | `play 0,2,0`+0xFF,0xFF,0xFF | 播放2号音频 | §§相关问题§§ 1. 如何避免串口通信中的指令重复发送问题? 2. 串口屏指令结束符的标准化格式是什么? 3. 在FreeRTOS环境下如何优化串口传输性能? 4. 多任务环境下如何防止串口资源冲突? 5. 如何设计高效的嵌入式GUI更新机制?</think>### 代码功能解析 这段代码是用于通过串口(UART6)向串口屏发送指令,实现垃圾类别名称的显示和语音播报功能。具体功能如下: 1. **显示垃圾类别名称**: - 发送指令:`data[uart3_rx.class]` 对应具体垃圾名称(如"塑料") - 发送指令:`data12` 对应垃圾类别名称(如"可回收垃圾") - 发送变量:`aa`(两位数字,用于更新显示计数) - 发送结束指令:`end`(指令结束标志) 2. **语音播报**: - 构造播放指令:`play_cmd`(格式为 `play 0,X,0`,X为音频编号) - 设置音频编号:`play_cmd[7]=0x32`(即字符'2',代表可回收垃圾的音频) - 发送完整播放指令:`HAL_UART_Transmit(&huart6, play_cmd, sizeof(play_cmd), HAL_MAX_DELAY)` ### 代码问题分析 #### 1. 指令重复发送(严重错误) ```c HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, sizeof(play_cmd), HAL_MAX_DELAY); // 正确发送完整指令 HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, 10,0xFFFF); // 错误:重复发送前10字节 ``` #### 2. 多余结束符 ```c HAL_UART_Transmit(&huart6, (uint8_t *) end2, sizeof(end2),0xFFFF); // 多余操作 ``` #### 3. 硬编码延迟风险 使用`0xFFFF`作为超时参数可能导致任务阻塞(应使用`HAL_MAX_DELAY`或合理超时) ### 优化建议 #### 修正后的可回收垃圾分支 ```c // 显示垃圾名称和类别 HAL_UART_Transmit(&huart6, (uint8_t *) data[uart3_rx.class], strlen(data[uart3_rx.class]), HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *) data12, strlen(data12), HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *)aa, 2, HAL_MAX_DELAY); HAL_UART_Transmit(&huart6, (uint8_t *) end, sizeof(end), HAL_MAX_DELAY); // 语音播报(单次发送完整指令) play_cmd[7] = '2'; // 明确使用字符赋值 HAL_UART_Transmit(&huart6, (uint8_t *) play_cmd, sizeof(play_cmd), HAL_MAX_DELAY); break; //可回收垃圾 ``` ### 关键改进说明 1. **删除重复发送**:确保播放指令只发送一次完整格式 2. **移除多余结束符**:避免指令冲突 3. **统一超时处理**:使用`HAL_MAX_DELAY`防止任务阻塞 4. **明确字符赋值**:`play_cmd[7] = '2'` 替代十六进制值 ### 串口屏指令规范 | 指令组件 | 内容示例 | 说明 | |----------|----------|------| | 显示指令头 | `t0.txt="` | 设置文本框内容 | | 垃圾名称 | `塑料` | 具体垃圾名称 | | 类别名称 | `可回收垃圾` | 分类结果 | | 计数编号 | `12` | 显示序号 | | 显示结束符 | `"`+0xFF,0xFF,0xFF | 指令结束 | | 播放指令 | `play 0,2,0`+0xFF,0xFF,0xFF | 播放2号音频 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值