我正在使用uints来存储位序列,并希望存储128位序列。我计划使用循环位旋转来循环它们。有一个很好的方法来制作一个128位整数?如果没有,那么下一个最好的东西是什么?#34;循环位移"?
我需要快速运行,因为它会在中断中发生。大约每250微秒。
答案 0 :(得分:3)
使用char[16]
数组,并在程序集中编写关键的移位代码,而不是C,因为C没有很好的方法可以让您从班次中获取进位。 / p>
您应该可以执行类似
的操作ldi r29, hi8(array) ; Load Y register
ldi r28, lo8(array) ; (16 bits)
ldi r22, 16 ; Loop counter
ldd r23, Y+15 ; Get the last byte
lsl r23 ; And put the last bit into the carry flag
loop: ; so it will be shifted into the first bit
ld r23, Y ; Load from array into r23
rol ; Rotate left through carry
st Y+, r23 ; Store it back and increment Y
dec r22 ; Decrement loop counter
brne loop ; Loop if not done
进行旋转,但这是未经测试的,我不是AVR程序集。 dec
是特殊的,不会干扰进位标记,因此可以通过循环安全地保存。