Как сбросить Ada.Real_Time.Clock? - PullRequest
       31

Как сбросить Ada.Real_Time.Clock?

4 голосов
/ 20 сентября 2010

при чтении Ada.Real_Time.Clock сразу после включения показывает значение, не близкое к нулю, а иногда даже отрицательное.Насколько я знаю, Ada.Real_Time.Clock предполагают сброс при включении питания.Как я могу сбросить Ada.Real_Time.Clock?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 сентября 2010

LRM Ada 2005 заявляет, что «реальное время определяется как физическое время, наблюдаемое во внешней среде . [ выделение добавлено - MC]

«В языке не указано, синхронизируются ли значения времени с каким-либо эталоном времени. Например, E может соответствовать времени инициализации системы или может соответствовать эпохе некоторого стандарта времени». (* 1 007 * Г.8 [18-19])

Как говорится, Ada не требует, чтобы "E", начало эпохи , служащее "нулевым временем" для значений времени реального времени, соответствовало какой-либо конкретной начальной точке; это оставлено на усмотрение разработчика компилятора.

Какие бы конкретные числовые значения вы не наблюдали для экземпляров Time, которые вы видите, будь то вблизи или далеко от нуля, положительного или отрицательного, зависят исключительно от выбора E компилятором, как он представляет значения времени и как он соответственно реализует возможности в реальном времени.

Поэтому вам следует избегать написания кода, который зависит от конкретных, узнаваемых значений времени, а также кода, который требует, чтобы значения времени были тесно управляемыми.

Значения Real_Time.Time следует считать абстрактными величинами.

1 голос
/ 21 сентября 2010

Согласен с Марком.Хотя я видел некоторые платформы, которые используют время с момента загрузки (особенно на платформах Intel, где я думаю, что им нравится использовать счетчик итераций процессора), это полностью зависит от поставщика компилятора.«время с момента запуска», и ваша платформа не дает вам этого, тогда вам нужно захватить Real_Time.Clock при запуске и вычесть это значение из всех дальнейших чтений из Real_Time.Clock.* Вы можете посмотреть, какие именно функции определены для пакета Real_Time, включая все разделы LRM, которые цитировал Марк, на его странице LRM здесь .

0 голосов
/ 13 декабря 2014

Это было давно, но если это кому-то поможет ... Я переустановил часы, записав 0 в регистры временной базы MCU.

...