ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 ноября
869678 Топик полностью
m16_home (07.09.2018 21:00, просмотров: 607) ответил AlexG на В моих программах есть модуль фиксации событий, в котором активно используются битовые поля. Событий становилось больше и больше > битов тоже > вот и 64-х битные переменные пригодились.
если событий станет > 64? зачем такой изврат? не знаю как это описать на сях, на асме для авра написал макросы где BITMAP - стартовый адрес битового поля, BITLONG - длина битового поля в байтах. соответственно размер битового поля = BITLONG * 8. и несколько макросов операций с битами ........................................................... .macro sbit // BIT (set BIT) .if (BITLONG -1) >= @0 lds r16, (BITMAP + (@0 / 8)) sbr r16, ( 1 << (@0%8)) sts (BITMAP + (@0 / 8)), r16 .else .error "End off BITMAP" .endif .endm ........................................................... .macro cbit // BIT (clear BIT) .if (BITLONG -1) >= @0 lds r16, (BITMAP + (@0 / 8)) cbr r16, ( 1 << (@0%8)) sts (BITMAP + (@0 / 8)), r16 .else .error "End off BITMAP" .endif .endm ........................................................... .macro sbbs // BIT (skipping the next command if BIT=1) .if (BITLONG -1) >= @0 lds r16, (BITMAP + (@0 / 8)) sbrs r16, (@0%8) .else .error "End off BITMAP" .endif .endm ........................................................... .macro jbc // BIT, ADR (if BIT=0 then PC=ADR) .if (BITLONG -1) >= @0 lds r16, (BITMAP + (@0 / 8)) sbrs r16, (@0%8) jmp @1 .else .error "End off BITMAP" .endif .endm .................................................................................