Важная информация

User Tag List

Страница 2 из 2 ПерваяПервая 12
Показано с 11 по 14 из 14

Тема: Часы реального времени.

  1. #11
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,632
    Благодарностей: 2766
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

    Поскольку эмулятор привода HClock должен позволять задать любой год в диапазоне -32767..+32767 - встал вопрос, в каком внутреннем формате лучше хранить дату.

    Для 64-разрядного счётчика миллисекунд ( или микросекунд ) логично выбрать в качестве нулевой точки момент начала эры CE : 01.01.01 00:00:00.


    E-time concept

    E-time - это количество E-интервалов времени ( секунд для E0 time, миллисекунд для E3 time, микросекунд для E6 time или наносекунд для E9 time ), прошедших с момента 01.01.01 00:00:00.

    Для CE-дат - это положительное число, для BCE-дат - отрицательное число.

    Unix time - количество интервалов E0 с момента 01.01.1970 00:00:00

    Windows FILE time - количество интервалов E7 с момента 01.01.1601 00:00:00

    Код:
    E0_Time( "01.01.0001 00:00:00" ) ==  0
    
    E0_Time( "01.01.0001 00:00:01" ) ==  1
    E3_Time( "01.01.0001 00:00:01" ) ==  1000
    E6_Time( "01.01.0001 00:00:01" ) ==  1000000
    E9_Time( "01.01.0001 00:00:01" ) ==  1000000000
    
    E0_Time( "31.12.-001 23:59:59" ) == -1
    E3_Time( "31.12.-001 23:59:59" ) == -1000
    E6_Time( "31.12.-001 23:59:59" ) == -1000000
    E9_Time( "31.12.-001 23:59:59" ) == -1000000000
    
    E0_Time( "01.01.1601 00:00:00" ) == 50491123200
    E0_Time( "01.01.1970 00:00:00" ) == 62167132800
    - - - Добавлено - - -

    Установить соответствие между номером дня, значениями E0, E3 и E6 и календарной датой для любого момента времени можно при помощи консольной утилиты Windows: E-time.exe
    Последний раз редактировалось Patron; 27.10.2017 в 15:14.

  2. Этот пользователь поблагодарил Patron за это полезное сообщение:
    hobot (29.10.2017)

  3. #12
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,632
    Благодарностей: 2766
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

    Чтобы пользователь мог при необходимости легко определить текущее значение E time, FILE time или Unix time или изменить хранимую дату на основе этих значений - логично добавить в нулевой блок HClock поля ED ( 2 слова == Int32 ), E0 ( 3 слова == Int48 ) и LeapSeconds ( 1 слово == Int16 ), содержащие номер дня от начала эры, число секунд от начала эры и число високосных секунд UTC. Поля ED и E0 доступны для чтения и записи, поле LS - только для чтения.


    000034 000036 - ED - Int32 - Номер дня от начала эры ( -1 == 31.12.-1 | 1 == 01.01.01 ) в диапазоне: -106751992 .. +106751992 или 0, если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты ( год, месяц, день ) было записано.

    000040 000042 000044 000046 - E0 - Int64 - Число секунд с момента начала эры ( -1 == 31.12.-1 23:59:59 | 0 == 01.01.01 00:00:00 | 1 == 01.01.01 00:00:01 ) в диапазоне: -9223372036854 .. +9223372036854 или 0x8000000000000000 ( 0x0000 0x0000 0x0000 0x8000 ), если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты или времени ( кроме поля номера миллисекунды в текущей секунде ) было записано.

    000050 - LS - Read Only - Величина високосной коррекции секунд в значении полей E0 и E6. Если контроллер рассчитывает значения E0 и E6 без учёта високосных секунд UTC - это поле должно быть нулевым.

    ...

    Для полноты спецификации полезно также иметь 64-разрядное поле E6, содержащее число микросекунд с момента начала эры.


    000052 000054 000056 000060 - E6 - Int64 - Число микросекунд с момента начала эры в диапазоне: -0x7FFFFFFFFFFF .. +0x7FFFFFFFFFFF или 0x8000000000000000 ( 0x0000 0x0000 0x0000 0x8000 ), если контроллер не поддерживает это поле или оно не должно измениться при записи. При записи игнорируется, если хотя бы одно из предыдущих полей даты или времени было записано.
    Последний раз редактировалось Patron; 28.10.2017 в 20:53.

  4. Этот пользователь поблагодарил Patron за это полезное сообщение:
    hobot (29.10.2017)

  5. #13
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,632
    Благодарностей: 2766
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

    Уточнение спецификации работы с блоками HClock:

    Цитата Сообщение от Patron Посмотреть сообщение
    Если контроллер не поддерживает изменение выбранного блока - выполнение записи должно завершаться ошибкой с кодом "попытка записи на защищённое устройство".
    В случае записи таймблока с ошибочным параметром в любом из полей - контроллер должен игнорировать переданный блок и возвращать ошибку записи с кодом IE_NUM = "параметр вне диапазона" ( 0356 ).
    Если в команде задания счётчика слов передаётся значение, превышающее размер блока контроллера - переданное значение должно запоминаться без изменений, но с возвращением ошибки IE_BLK "выход за пределы устройства".
    Если поле размера таймблока или заданное значение счётчика слов превышает размер выбранного блока контроллера - контроллер должен обработать поддерживаемые поля и завершить чтение/запись без ошибки.
    Если при записи размер таймблока (в первом слове блока) превышает счётчик слов, заданный дисковой командой "установить счётчик слов" или превышает размер выбранного блока контроллера - в качестве счётчика обрабатываемых слов контроллер должен использовать меньшее из трёх значений: 1) размер блока контроллера; 2) размер блока программы; 3) значение счётчика слов.
    При чтении - контроллер должен всегда выдавать в первом поле свой полный размер выбранного блока, но передавать программе количество слов блока, не превышающее текущее значение счётчика слов.

  6. #14
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,632
    Благодарностей: 2766
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    .

    Уточнение спецификации работы с блоками HClock:

    000050 - LS - Величина високосной коррекции секунд в значении полей E0 и E6. Если контроллер или программа рассчитывает значения E0 и E6 без учёта високосных секунд UTC - это поле должно быть нулевым. Если при записи блока значение коррекции секунд, использованное программой, не соответствует правильному значению - контроллер исправляет разницу.

    ...

    Если контроллер не использует високосную коррекцию секунд, а программа при изменении даты и времени её передаёт - контроллер уменьшает переданное значение E0 на величину LS, а E6 - на величину LS*1000000.
    Если контроллер использует високосную коррекцию секунд, а программа нет - контроллер увеличивает переданное программой значение E0 на правильную величину LS, а E6 - на величину LS*1000000.
    Если контроллер и программа используют коррекцию секунд, но одно из значений превышает другое - правильным принимается большее значение на текущую дату.
    Если программа задаёт новую коррекцию секунд для даты, превышающей дату и величину последней коррекции секунд, используемой контроллером - контроллер должен запомнить дату введения новой коррекции и её величину.
    Если программа передаёт блок с единственным активным полем LS - контроллер при отсутствии запомненной даты дополнительной коррекции - запоминает текущую дату и переданную коррекцию, а при наличии запомненной даты дополнительной коррекции - изменяет значение коррекции для этой даты на переданное. Если контроллер не поддерживает високосную коррекцию секунд - запись блока с единственным активным полем LS игнорируется.
    Последний раз редактировалось Patron; 04.11.2017 в 18:38.

Страница 2 из 2 ПерваяПервая 12

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 186
    Последнее: 02.10.2017, 13:29
  2. PseudoTR-DOS для NEMO IDE без реального TR-DOS %)
    от fan в разделе Внешние накопители
    Ответов: 14
    Последнее: 15.01.2010, 16:01
  3. Ответов: 74
    Последнее: 09.07.2009, 10:39
  4. Spectrum как система реального времени
    от King of a S†ellar War в разделе ZX Концепции
    Ответов: 55
    Последнее: 21.12.2008, 19:57

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •