ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
29 июня
241096 Топик полностью
MBedder, терминатор (28.02.2011 22:23 - 22:54, просмотров: 360) ответил mazur на Есть битовое поле. Скажем, 24 бита, то есть, 3 байта. И нужно проверить определенный бит. Когда писал проверочный код, это получилось 24 функции, которые отличались только номерами битов. Попытался возложить эту функцию микроконтроллеру.
Будь проще, и к тебе потянутся люди :) Фтыкай и учись - 2 слова/3 такта вместо всего твоего монстрика, да еще и бит-массив любой длины, кратной 8 ;----------------------------------------------------------------------------------------------- ; Tests a bit #0..N-1 in an N-bit array (N must be a multiple of 8 - 8,16,24,32,40 etc.). ; Trashes R16 - save/restore it if needed. ; .macro btest lds r16,@0+@1/8 ; Read an (N/8)th byte of a bit array depending on bit # andi r16,1<<(@1%8) ; Mask out irrelevant bits, set zero flag if bit #@1 is 0 .endm ;----------------------------------------------------------------------------------------------- .dseg bits: .byte 296/8 ; Sample 296-bit array (little endian) .cseg .equ foobit = 179 ; Bit # to be tested (0..N-1 range) btest bits,foobit ; Perform a bit test brne foobit_is_1 ; Branch if bit is set ; foobit_is_0: ; Process FOOBIT = 0 state rjmp continue ; Go ahead with code foobit_is_1: ; Process FOOBIT = 1 state continue: ; Proceed