传输层

统一库 dlt698::dlt698 的传输接口提供字节流通道。TCP 和原始串口依赖 standalone Asio,但只有传输模块用它——消费方不需要 Asio 头文件。

这一部分的页面

页面内容
执行器IExecutor、ITimer、ManualExecutor 虚拟时钟
通道与内存通道IChannel 接口、ChannelOptions、MemoryChannel
TCP 通道IoRuntime、TcpChannel、TcpListener
TCP 手动报文调试LINK 登录、5 秒断开、连接模式与可直接发送的 GET
串口与串行链路SerialChannel、SerialLinkChannel、RS-485 方向控制

组成部分

类型归属说明
IExecutor / ITimercore串行执行器与单调计时器
ManualExecutorcore手动驱动的虚拟时钟,仅单线程
IChannelcore异步字节流接口
MemoryChannelcore有界内存通道,模拟用
SerialLinkChannelcore698 串行链路时序适配
IoRuntimetransport由应用驱动的 Asio 事件循环
TcpChannel / TcpListenertransportTCP 连接与监听
SerialChanneltransport原始串口字节流
core 与 transport 的区别

MemoryChannel 和 SerialLinkChannel 在 core 里,不依赖 Asio,用 DLT698_BUILD_TRANSPORT=OFF 也能用。只有 IoRuntime、TcpChannel、TcpListener、SerialChannel 需要传输构建。

没有隐藏线程

这是整个传输层最重要的设计约定:

  • IoRuntime 不创建内部工作线程,由应用调用 run() / run_for() 驱动。
  • ManualExecutor 同样不创建线程,时间由 advance() 推进。
  • SyncClientService 不创建线程,只在调用线程上等待。
  • IExecutor::post/schedule 必须延后执行任务,不能在投递函数内直接调用用户任务。

因此"谁驱动运行时"始终是应用的责任。这也是为什么模拟(ManualExecutor + MemoryChannel)和生产(IoRuntime + TcpChannel)能共用同一套会话代码。