实时系统是否需要实时时钟(RTC)?[关闭]


11

假设我们正在使用由高分辨率计时器组成的实时Linux系统和硬件,那么具有RTC是否会影响系统的实时性?

这里说它减少了CPU和内存的使用,但是有没有办法比较两者之间的差异?


13
链接中的比较很愚蠢。
管道

10
是的,@ pipe,最重要的是,即使数字也完全错误。我将很高兴购买价格为DS12C887的RTC芯片,该芯片具有“ 100年内出现1秒错误”的信息。事实上,我会购买尽可能多的积蓄。这是300ppb的精度。超过100年。那是一些严重的频率问题。
马库斯·穆勒

8
实时系统和实时时钟是不同的东西,没有可比性。RTC用于计时,而Real Time System用于实时服务(不是UTC,而是为了快速)
MaNyYaCk

3
@pipe DS12C887,百年计划版本
马库斯·穆勒

4
@JimmyB这样的时钟用于计时,而不是时间!即使您有参考纪元,我们通常也将其设置为TAI(或GPS),并在需要UTC时应用相关的UTC校正。对于GPS,此校正参数来自星历表。从这个意义上讲,UTC是一种“时区”-类似地,您不会在DST生效时重置时钟,而是等待它重新稳定下来-无需重置,因为时钟为您提供了脉冲,而不是时间戳。
Lightness Races in Orbit

Answers:


40

您链接的文章只是完整而毫无意义。“实时时钟”中的“实时”(用于指代本文中介绍的精简设备的类型)和“实时系统”中的“实时”是完全不同的术语。前者意味着使用长寿命的纽扣/硬币型电池来存储当前日历时间(通常相对于高精度的日历时间差得很远,而不像所要求的链接文章所述的高精度),并且无需外部电源就可以提前。后者意味着对事件的响应具有从事件时间到响应时间的潜伏期的严格限制。

文章中的其他一些内容确立了它应被视为不可信任的特征:

几乎可以忽略不计。在100年内约为1秒

100年中的1秒大约是317 ppt(是的,这是万亿分之一)。使用任何现有的商用时钟技术都无法获得这种时钟稳定性。即使每年达到1秒,也至少需要一个OCXO,它需要一个高功率,始终开启的烤箱来调节温度。使用长寿命纽扣电池供电的设备可以得到的想法是可笑的。

实时系统,如数字时钟,考勤系统,数码相机

这些都不是实时系统。


1
实际上,那些系统很可能具有实时组件,尽管它是“软实时”,因为丢失/超出处理刻度的后果很小。不过,链接作者并没有误入歧途。
格雷厄姆

3
@Graham:从某种意义上说,它们确实可以做到,但是利润如此之大,以至于您通常认为它们是非实时的。如果您将定义扩展到足够远,那么最终任何交互式系统都是实时的,因为当它在几分钟或几小时内没有反应时,就会有人认为它崩溃了。:-)因此,我认为将某些内容分类为“实时”是非常有用的,因为这些内容的边距很小并且会导致丢失它们的严重后果。
R .. GitHub STOP HELPING ICE

3
@R ..即使利润丰厚,并非所有系统都是实时的。如果系统能够无限期地挂起,则它不能是实时系统。系统必须绝对保证一个时隙只占用有限的时间,并且挂(死锁/活锁)根据定义是无限的。
森林

2
但是,关于实时系统到底是什么的元讨论不属于评论部分。

1
@Uwe:确实我搞砸了,但是现在我再看一遍,我认为我的差距是10的2倍-是0.316ppb吗?计算为1s /(100 * secs_per_year),其中secs_per_year = 31556952。
R .. GitHub STOP HELPING ICE

39

实时系统是在指定时间内响应内部或外部事件/刺激的东西,该时间通常以毫秒或微秒为单位。它需要精度较低的计时器而不是RTC。

您的问题的答案是“否”,它不会影响系统的实时性。


1
这很简短,是对IMO问题的直截了当的答案。
Rev1.0

某些类似银行的联邦实体基于原子时钟在其服务器中使用1ns RTC。即使暗示对其微波链路的篡改也会改变到接收器的传输时间。快速RTC也适用于多相信号量。
Sparky256 '18 -10-30

4
一些实时系统不需要计时器,因为它们完全是事件驱动的,并且不需要任何事件都基于时间。系统只需要在分配给该事件的时间段内响应每个事件,包括当多个事件彼此之间非常接近发生时。在某些情况下,可能需要抢占式内核。可以使用外部计时器来验证系统是否在其时间限制内运行。
rcgldr

2
如果您想要一个真实的示例,那么MicroWare用于Motorola 6809 / Hitachi 6309处理器的OS-9操作系统就是实时OS。Tandy彩色计算机系列使用6809s并运行OS-9(我第一次接触过* nix式OS),并且实时时钟从来都不是该系统上的标准设备,并且OS-9并不是必需的。
zmerch

3

如果您的系统在重置后具有RTC处于脱机状态,则可以在日志中输入正确的日期。如果您需要仔细查看日志,并且时间戳不正确会使您,您的软件开发人员和客户发疯,那么在一般情况下进行调查几乎是不可能的。

您所指文章中的容易或困难,低或高是一种个人观点。如果您以前从未做过并且没有明确的系统要求和工作说明,那么这将是困难且昂贵的。当您知道需要什么以及使用哪种最佳设备时,它既简单又便宜。


问题是如何量化实时系统中RTC与无RTC相比减少的CPU时间和内存使用。您的答案无法回答。
管道

1
@pipe取决于CPU架构和要求。用给出的稀缺信息根本无法回答。我的回答是说为什么RTC必须存在于其中,而不是通用的说法,否则它将如何解决。程序员和系统架构师可能会花费大量时间来设计一个好的系统和代码,而坏的系统和代码。
匿名

3

在大多数系统中,RTC外设相对于其他形式的计时的唯一真正优势是,当系统的其余部分进入睡眠状态或在某些情况下完全断电时,RTC的时间测量将不受影响。实际上,许多RTC外设的设计方式使其无法用于大多数目的,而不是记录大约一天中的时间。例如,许多RTC外围设备(可能占多数,但可能不是绝大多数)仅限于以一秒为增量报告时间,并且其中许多至少有时需要在设置警报或-在某些情况下-甚至只是试图阅读时间。因此,使用RTC的正常方法是在启动时将其值简单地复制到一个更有用的时钟中,并在设置了“ wall time”时进行设置,

除非第一个和最后一个之间的间隔超过1/32768秒,否则任何四个连续的读取都将保证包含两个匹配的(因此是正确的)。设置警报可能会生成虚假的唤醒事件,但顺序如下:

  • 禁用唤醒锁存器的中断
  • 在当前时间之前最多设置0x7FFFFFFF节拍的唤醒时间(大约9小时)
  • 重置唤醒电路
  • 读时钟
  • 如果新读取的时间表明已经达到唤醒时间,请采取适当措施
  • 从唤醒锁存器使能中断

应充分容易地处理所有边缘情况,以适合通用计时用途。不幸的是,无论出于何种原因,RTC外设都从未采用这种方式进行设计,而是更加复杂且使用较少。


“真实” RTC还提供日历功能(每月,每周、,年...),这可能在软件中实现您很麻烦。
JimmyB

1
@JimmyB:需要对日期和时间做不重要的事情的软件通常无论如何都将包含这样的逻辑,并且能够以线性格式保持事物,除非执行用户I / O会比不得不从无用的转换更干净。每次读取RTC时BCD YMDhms转换为线性时间,并在写入时转换回无用的fromat。
超级猫

1
@JimmyB:作为一个简单的示例,如果要在似乎是2016-03-01 00:30的时间打开系统电源,而最后一次打开电源是在2015-10-01的00:30:00,那么现在几点了?软件需要知道2016年2月有29天才能确定时间是2015-02-29 23:30:00,那么日历硬件究竟能买到什么?
超级猫

OP中引用的RTC芯片本身可以正确处理leap年。
JimmyB

1
@JimmyB:如果从夏令时过渡后系统第一次打开电源,则软件将需要将时钟重新设置为一个小时。如果恰好发生在午夜和凌晨1:00之间,则需要将日历重新设置为一天,这又需要了解日历。确实,除非要求用户手动设置工作日和日期,否则应用夏时制的最简单方法是处理线性日期。
超级猫

3

这似乎是围绕术语“实时”的使用的术语问题。

实时时钟

实时时钟是用于稳定/准确(在一定公差范围内)计时的设备,因此主机系统可以使用它来将事件/动作与发生的时间和日期相关联。

您可以将实时时钟想像成与计算机相连的数字手表的内部。它具有独立供电的时间基准,旨在保持稳定和合理的准确性。就像数字手表一样,它不会因为主机关闭而丢失当前时间。实时时钟主要是为方便起见而安装在计算机上的,因此用户不必在每次启动系统时都重新输入当前时间和日期,也不必进行频繁的调整来补偿漂移。

实时时钟的替代方法是使用由系统时钟驱动的软件和内部计时器。这样的方法是可行的(原始的IBM PC就是这种方法),但不是特别稳定。在操作系统关闭,挂起或崩溃的任何时候,它也会丢失日期/时间的跟踪。

实时系统

当术语“实时”应用于计算机系统或应用程序时,它描述的是一种在很短的确定性时间内(通常只有几毫秒,有时更少,具有定义的顺序)对现实事件做出响应的系统同时输入。实时系统用于诸如机器控制,机器人技术,模拟和游戏之类的事情。尽管实时应用程序可以利用当前时间和日期信息,但应用程序并不是“实时”的,因为它利用了当前时间和日期。

实时时钟与高分辨率计时器

如上所述,实时时钟的目的是可靠地跟踪当前日期和时间,通常只跟踪秒和秒。一个好的人将具有最小的漂移(每天增加或减少几秒钟)。实时时钟通常没有高分辨率。与现代CPU时钟相比,它们的基本时钟通常运行得很慢。这是为了最大程度地降低功耗(消耗其独立电源),以便在长时间关闭主机电源后,时钟将继续可靠地保持时间。

高分辨率计时器与当前时间或日期无关。它的目的是以某种精度(也许微秒甚至更低)测量时间间隔。为此,它必须基于稳定的高频时钟-通常是计算机系统时钟。高分辨率计时器通常也不关心长时间的漂移,因为通常的目的是测量较短时间的时间。高分辨率计时器没有与实时时钟相同的功耗问题,因为在关闭主机电源时,它们没有工作要做。


1
有点儿麻烦,“最短的”可能不是实时的。实时是确定性时间的响应,如果同时发生多个事件,则以定义的顺序响应。
awjlogan

0

我认为使用实时时钟的主要原因是在一定时间间隔内的准确时间。常规时钟通常会用电容器进行修整,并可能基于多种因素(例如时钟时序电路的电容/电阻失调,时钟时序电路的不确定性)失控而导致频率差异较大。既可以达到提高性能的目的,也经常有可编程逻辑来划分时间,而这又会引入错误。

通常,RTC可以具有计时器和看门狗等。与之耦合的是,可以保证或良好地假设,将以规则的精确间隔(甚至可以与各种事物保持同相)执行给定的过程或代码。使用常规时钟很难做到这一点。否则您需要在生产中非常小心时钟是准确的。您会看到诸如音频之类的东西,以及使用rtc代替高速系统时钟可能不需要的东西。

至于RTC的含义,我不能肯定地说。我知道Linux是嵌入式世界中流行的工具,但是我不确定Linux在所有实时应用程序中的表现如何。多线程可以使执行时间不确定,但是当硬件大大超过性能要求时,即使在实时应用程序中,许多解决方案也可以正常工作。

然后是关键任务和低性能应用程序。这里需要做的一件事是确定性的并且通常是较低复杂度的解决方案。在这里可以明显地使用RTC。Linux可能提供对与其耦合的中断的特殊访问。在我看来,对于确定性实时,您不仅需要rtc,而且需要中断或os访问它们。


1
如何将RTC与看门狗精确耦合,才能保证时钟与各种事物保持“同相”?
德米特里·格里戈里耶夫

好吧,如果您使用外部时钟源,则取决于该时钟源以及连接它的电路,例如电容,电阻或阻抗。因此,这可以通过谐波振荡(其解决方案是一个波,然后看相角等)以及微处理器的应用来回答您所要求的一切来描述。不幸的是,所有这些东西在许多应用中都必须考虑在内。
元帅工艺

0

如果您依赖与互联网上其他计算机的安全通信,则需要一个实时时钟(并非必须100%拥有,但是如果您没有本地时间参考,则需要信任其他东西,并且可以) t信任证书,除非您知道日期)。

因此,不,您不需要所有“实时”系统。但是,根据您的应用程序,您可能仍希望RTC处于低功耗状态后,它是获取良好时机的最节能方式。


并非完全如此。例如,您可以信任证书(尤其是固定证书),即使该证书已过期或理论上是在将来似乎发布的。但是,通常最好先尝试做一个SSL客户端,然后再进行NTP修复。自然,必须将NTP的安全方案设计为有效,而无需从明智的时间观念入手。
克里斯·斯特拉顿

4
过度夸张是一件令人心动和美丽的事情,如果它形成主要信息,那是错误的。从根本上讲,密码的任何一种操作方式都不要求时间或日期。
Paul Uszak '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.