根据用户指南、当 RTC 与 CPU 异步时、应进行多数表决以确定计数器的正确读数。 然而、 正如 Jens-Michael Gross 在这里指出的、需要至少四个连续读数才能始终正常工作。 此外、必须假定 CPU 频率相对较高、足以在下一个 RTC 时钟到达之前运行全部四个读数。
另一种方法要简单得多,如下所示:
u32 RTC_COUNTER (void) { volatile u32 v1、v2; V1 = RTCNT; V2 = RTCNT; 而(1 < v2 - v1){ V1 = v2; V2 = RTCNT; } 返回 v2; }
也就是说、连续读取、直至发现其中一个值等于或大于前一个值、然后将其返回。
这是可靠的吗? 或者、v1和 v2是否有可能遇到相同的竞争条件、导致相同的 v1和 v2、同时两者都不正确(我认为这也与多数票决算法相关)?
谢谢!