与发送不同,在接收时,模块的与 MTU 使用有关的行为取决于配置。
如要最大程度提高数据吞吐量,请按如下方式配置:
o允许 MTU 内的多段:控制字节位置 = 1。段的最后一个数据字节后面紧接下一段的控制字节。
o段大小可以超过 MTU 大小:仅段的第一个 MTU 包含段的控制字节,后续 MTU 块仅包含数据。
o使用 Block Forward 机制:模块最多传输七个未确认的 MTU 块。
|
步骤 |
操作 |
|---|---|
|
1 |
检查自上个循环之后,接收序列号是否已更改。 如果其是帧的开头,则初始化接收器缓冲区(写入指针位于缓冲区开头,接收帧长度 = 0,等等)。优化的传输意味着,在一个 MTU 中可包含多个短帧,这样,就必须要能够使用应用程序管理足够数量的接收缓冲区。 确定 MTU 中的控制字节位置。如果 RxByte1 是控制字节,则它是不包含前一段(帧)的余留数据的 MTU。如果第一个未分配的 RxBytex 是新段的控制字节,则它是包含前一帧的余留数据的 MTU。段内的 MTU 块不必具有控制字节。 |
|
2 |
评估来自 RxBytex 的控制字节信息。确定数据长度、段长度和下一控制字节位置。如果设置了帧结束检测,则它是最后一段。 |
|
3 |
如果有数据可用,则复制从 RxBytex 开始的串行数据块。保存当前写入指针位置,并添加新帧长度。 计算段的余留长度。下一个 RxBytex 可能已经是下一段或帧的控制字节。在设置了帧结束检测且复制了数据后,将此帧标记为完整。 |
|
4 |
增大 OutputSequence 中接收器序列号确认的值。 |
|
5 |
重复步骤 1 至 4,直到以数据块的形式接收了串行数据。 |
MTU 被配置为 15 字节,帧正被接收:27 字节、20 字节、11 字节...