ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Android RTC时间

2026/9/1 20:48:45 拓冰建站 浏览量
Android RTC时间 Android RTC时间hwclock禁用网络和禁用时间自动更新存在时间漂移方案hwclock标准 hwclock 命令默认读 /dev/rtc0外挂rtc一般是 /dev/rtc1所以hwclock -r→ 读 rtc0pm8xxx没电 → 1970hwclock -r -f /dev/rtc1→ 读 rtc1pcf8563有电 → 2026System.currentTimeMillis()← 来自 rtc1正确date -s “2048-03-11 14:00:00”hwclock -w -f /dev/rtc1hwclock -r -f /dev/rtc1禁用网络和禁用时间自动更新存在时间漂移RTC 挂测 7天 时间比北京时间快了23秒将时间偏差转换为频率偏差ppm百万分率这是写入寄存器的依据。测试时长7 天 7 × 24 × 3600 604,800 秒时间偏差23 秒走快北京时间 UTC8但 RTC 通常以 UTC 时间运行不过 偏差计算与参考系无关只看相对误差 ppm百万分之一计算公式p p m 总秒数 误差秒数 × 10 6 ppm \frac{总秒数}{误差秒数} × 10^6ppm误差秒数总秒数​×106代入数据p p m 23 604800 × 10 6 ≈ 38.03 p p m ppm \frac{23}{604800} × 10^6 ≈38.03ppmppm60480023​×106≈38.03ppm结论你的 RTC 实际精度约为 38 ppm偏快每秒大约多走 38个微秒导致每天快约 3.29秒。方案方案1启用 RTC 硬件校准寄存器如 STM32要对 RTC实时时钟硬件底层因温度漂移、晶振公差、电路设计导致的走时误差进行补救需从硬件选型、电路优化、软件补偿、校准机制四个层面综合施策。方案2上层同步RTC时间到系统还是依赖RTC硬件方案1代码位置frameworks/base/apex/jobscheduler/framework/java/android/app/AlarmManager.javaframeworks/base/apex/jobscheduler/framework/java/android/app/IAlarmManager.aidlframeworks/base/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.javaframeworks/base/core/java/android/os/SystemClock.javaframeworks/base/services/core/java/com/android/server/SystemClockTime.javaframeworks/base/services/core/jni/com_android_server_SystemClockTime.cpp