上下文
命名空间 ara::tsync 在 AUTOSAR Adaptive Platform 内提供用于高精度时间同步的接口。它允许应用程序读取同步的时间点、监视同步状态以及记录测量值以供验证使用。对于消费端应用程序而言,核心角色由类 SynchronizedTimeBaseConsumer 承担,该类封装了对通过 InstanceSpecifier 配置的时基的访问。在提供方,SynchronizedTimeBaseProvider 作为提供和控制时基的访问点。
时间表示的基础是伪时钟 TimeBase,通过它将类型别名 Timestamp 定义为 std::chrono::time_point<TimeBase, std::chrono::nanoseconds> [SWS_TS_01251] 。实际的同步工作以及与诸如 IEEE 802.1AS 或 PTP 等总线协议的连接通常通过后台服务进行。Interpretation:该时间守护进程与 ara::tsync 的实例进行跨进程通信,这可以通过特定错误 TsyncErrc::kDaemonConnectionLost [SWS_TS_00901] 得到证实。 问题 Q-dd9d1a36f7573a03 (未决) 该架构还辅以如 ConsumerTimeBaseValidationNotification 和 ProviderTimeBaseValidationNotification 等接口,以及用于运行时间和精度测量的各种数据结构(例如 TimeMasterMeasurementType、TimeSlaveMeasurementType、PdelayInitiatorMeasurementType 和 PdelayResponderMeasurementType)。
diag_tsync_context
ConsumerApp
Consumer-Anwendung
Consumer
SynchronizedTimeBaseConsumer
ConsumerApp->Consumer
使用
ProviderApp
Provider- / Validator-Anwendung
Provider
SynchronizedTimeBaseProvider
ProviderApp->Provider
使用
TimeBase
TimeBase
(std::chrono Pseudo-Uhr)
Consumer->TimeBase
referenziert
Daemon
Time Sync Daemon
Consumer->Daemon
IPC / Synchronisation
Provider->Daemon
IPC / Bereitstellung
上下文图:命名空间 ara::tsync 中应用程序、接口类和时间守护进程之间的交互。来源:[SWS_TS_00901] 、[SWS_TS_01251] 。
生命周期
同步时基的生命周期由状态结构和离散状态转换决定。时间状态的快照(包括所有元数据)由 SynchronizedTimeBaseStatus 表示。通信和同步状态通过枚举 SynchronizationStatus [SWS_TS_01050] 进行控制:
kNotSynchronizedUntilStartup:系统启动后第一次成功同步前的初始状态。
kSynchronized:时基与 Time-Master 同步。
kSynchToGateway:通过网关进行同步。
kTimeOut:在定义的时间窗口内无法建立或保持同步。
除通信状态外,枚举 LeapJump [SWS_TS_01051] 还记录时间基准的跳变校正:kTimeLeapNone 表示无阈值超限的连续运行,而 kTimeLeapFuture 和 kTimeLeapPast 则分别指示向未来或过去的重大校正。
关于并发性需注意,根据规范,SynchronizationNotifier [SWS_TS_14222] 、SynchronizedTimeBaseNotifier [SWS_TS_14221] 和 TimePrecisionNotifier [SWS_TS_14223] 等回调类型被归类为非线程安全。因此,状态转换(尤其是发生超时或重新同步时)需要由应用程序端进行同步。
diag_sync_status
init
kNotSynchronizedUntilStartup
kNotSynchronizedUntilStartup
(Initialzustand)
init->kNotSynchronizedUntilStartup
kSynchronized
kSynchronized
(Time Master)
kNotSynchronizedUntilStartup->kSynchronized
与 Master 同步
kSynchToGateway
kSynchToGateway
(Gateway)
kNotSynchronizedUntilStartup->kSynchToGateway
与网关同步
kTimeOut
kTimeOut
(Timeout)
kNotSynchronizedUntilStartup->kTimeOut
Zeitfenster abgelaufen
kSynchronized->kTimeOut
Sync-Verlust
kSynchToGateway->kTimeOut
Sync-Verlust
kTimeOut->kSynchronized
Re-Synchronisation
kTimeOut->kSynchToGateway
Re-Synchronisation
状态图:同步时间基准的生命周期与通信状态。来源:[SWS_TS_01050] 。
使用路径
消费者应用程序使用同步时间基准的典型流程分为以下步骤:
初始化与绑定: 应用程序为所需的时间基准实例化 SynchronizedTimeBaseConsumer,并指定匹配的 InstanceSpecifier。
注册通知: 为了监视同步状态,应用程序会传递回调函数。其中包括用于 SynchronizationStatus 更改的 SynchronizationNotifier [SWS_TS_14222] 、用于详细状态快照(SynchronizedTimeBaseStatus)的 SynchronizedTimeBaseNotifier [SWS_TS_14221] 以及用于高精度测量数据(TimePrecisionMeasurement)的 TimePrecisionNotifier [SWS_TS_14223] 。
时间戳查询: 当处于状态 kSynchronized 或 kSynchToGateway [SWS_TS_01050] 时,应用程序读取类型为 Timestamp [SWS_TS_01251] 的高精度时间值。
对状态跳变和时间跳变的响应: 如果通知指示 LeapJump 不等于 kTimeLeapNone [SWS_TS_01051] 或转换到 kTimeOut [SWS_TS_01050] ,则应用程序会调整内部定时器或转入降级模式。
用户数据传输: 如果在时间同步过程中传输特定于用户的有效载荷数据,则使用结构体 UserData。
错误场景
该命名空间的错误处理遵循基于错误域 TsyncErrorDomain 的 AUTOSAR 标准模型。通过 GetTsyncErrorDomain() [SWS_TS_00909] 访问该全局域。错误原因由枚举类型 TsyncErrc [SWS_TS_00901] 描述:
kDaemonConnectionLost:请求的操作失败,因为与 Time-Sync-Daemon 的连接已断开。
kLimitsExceeded:传递或计算的值超出了允许的值范围。
kFunctionNotSupported:当前配置或平台环境中不支持所请求的功能。
kInvalidUserDataSize:传递的用户数据长度超过了由 UserData::kMaxUserDataSize 定义的当前 3 字节的最大值。
ara::core::ErrorCode 的实例通过辅助函数 MakeErrorCode [SWS_TS_00910] 创建。该函数被声明为 noexcept 且是线程安全的。对于基于异常的架构,该命名空间提供了异常类 TsyncException。
gemini-3.8-flash-low· 2026-10-13 · 德文原文