Цитата:
Сообщение от tvf
Главное, что более поздему событию должно соответствовать большее значение переменной. Тогда операции сравнения будут работать корректно. Для применения в устройствах типа расписание или график вполне достаточно.
|
Опаньки! Обломинго!!!
В общем, операции сравнения корректно работают, если обе даты в формате ts1984 принадлежат диапазону до 31.12.2015 года. Или обе - случились не раньше 1.01.2016 года.
Причина - блок CMP рассматривает старший бит (long) как знак. Соответственно, операция сравнения работает корректно только тогда, когда знак у обоих "таймштампов" одинаковый. Если же знак разный, то дата по 2015 год будет считаться более "поздней" (ибо число с ней считатется положительным), нежели дата, случившаяся не раньше 2016 года (число с ней считается отрицательным).
ВОПРОС К СООБЩЕСТВУ - как будем поступать?
Есть два варианта:
1) инвертировать старший бит в значении ts1984(long) при упаковке и распаковке - тогда даты не будут путаться в любом случае ("отрицателным" станет диапазон дат до 2015 года, положительным - начиная с 2016). Но - это будет уже третья версия макросов. Т.к. математика с этим форматом "не работает" - это, пожалуй, будет лучший выход.
2) пишем макрос, в котором определяем знаки используемых для сравнения чисел (значение старшего бита), и, если они разные - через элементы MUX(long) меняем местами числа на входе блока CMP. Решение спорное, зато не меняет последнюю версию макроса...
Какой вараинт выбрать???
P.S.
Ребят, у меня при загрузке макроса вместо него тупо вставляется "простой" квадратик вместо блока-макроса с выводами - приходится его раскрывать и копировать блок макроса в проект через Ctrl-C/Ctrl-V...
Это у меня лоджик так глючит - или проблема у всех, и стоит переписать макрос с нуля, чтоб уйти от проблемы (заодно "убрав" ошибку со сравнением двух меток таймштампов)?