ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
7 июля
197022 Топик полностью
ReAl (08.06.2010 22:34 - 22:43, просмотров: 160) ответил хмамин на Про размышлизм. 2 MegaJohn - такой вот наваял
Что-то мне кажется, что проще так status = (T >= B) xor (T >= E) xor (B >= E), где T - текущее время B - время начала окна E - время конца окна XOR можно сделать инкрементом переменной и анализом младшего бита. status = 0; if(T >= B) ++status; if(T >= E) ++status; if(B >= E) ++status; /* тут _младший_ бит в единичке - время в окне */ Кстати, совершенно не важно -- все времена двухбайтовые в BCD часах-минутах или же линейные в минутах. Если сами разности не нужны, нужно только больше/меньше/равно, то можно пары hh:mm сравнивать как двухбайтовые двоичные числа, для AVR будет пара cp/cpc и переход. Или вообще cp/cpc в нужном порядке и сообразить чем инициализировать status и кто там нужен из
adc status, zero_reg
sbci status, 0
sbci status, 0xFF
и какое состояние младшего бита является активным. На этом ещё кое-что наиграется, вместо цепочек команд
двухбайтовое_сравнение
обход_инкремента
инкремент
будут цепочки
двухбайтовое_сравнение
добавление_переноса