timstamp (не unix_time)
Попробовал собрать макросы метки времени, "собирающих" дату и время в одну переменную типа long (с точностью до 1 секунды). В теории должна работать на любом Сегнетиксе, но проверял только на smh2G. Выношу на рассмотрение коллег (макросы открыты для просмотра и даже испохабливания).
1) проверка "истинности" входных данных не проводится - макрос рассчитан на прием данных из соответствующих элементов FBD. Если кому надо вводить их "с клавиатуры" - прошу позаботиться о проверке корректности заранее.
2) На сохранение года осталось 6 бит (это числа от 0 до 63), поэтому за "начальный" год выбран 1984 (он в двоичном коде выглядит как 11111оооооо, т.е. 6 последних бит при записи года в двоичном виде - будут ни чем иным, как смещением от 1984 года до рассматриваемой даты).
3) для выполнения каких-либо вычислений - упакованный формат ts1984 абсолютно непригоден! (впрочем, особые извращенцы вполне могут это сделать - создав обработчик из десятков FBD-блоков)....
макросы упаковки ts1984_in и распаковки ts1984_out пригодны в следующем диапазоне дат:
с 00:00:00 1.01.1984 по 23:59:59 31.12.2047 (а де-факто сохраняют с 00:00:00 0.00.1984 по 31:63:63 31.15.2047)
Arsie
DEN
Пожалуйста, посмотрите - "оптимизируется" такой макрос вашим компилятором при записи в контроллеры,
или сильно более громоздкая конструкция на регистрах сдвига и преобразованиях int->long потребует меньше ресурсов?
.
Последний раз редактировалось Arsie, 19.08.2014 в 11:04
Причина: добавил п.3, а заодно чуточку переформулировал отдельные пункты (смысл не менял, ничего не удалял)
|