我有一个 Java 方法,它必须多次执行一段代码:
// Obtengo los 7 bits de direccion
clockStateIndex = dataStateIndex;
for(int bit = 7; bit > 0; --bit){
clockStateIndex = clockSource.nextClearBit(clockStateIndex); // Siguiente bit en SCL
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2; // Busco la mitad del bit clock
bitSet(direccion, data.get(testIndex), bit); // Compruebo SDA en la mitad del bit SCL
}
// Obttengo el bit R/W
clockStateIndex = clockSource.nextClearBit(clockStateIndex); // Siguiente bit en SCL
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2; // Busco la mitad del bit clock
rwBit = data.get(testIndex); // Obtengo el estado del bit R/W en el medio del bit SCL
// Obtengo el bit de ACK
clockStateIndex = clockSource.nextClearBit(clockStateIndex); // Siguiente bit en SCL
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2; // Busco la mitad del bit clock
ackBit = data.get(testIndex); // Obtengo el estado del bit R/W en el medio del bit SCL
// Si tengo un ACK obtengo los 8 bits de dato
if(ackBit == false){
for(int bit = 8; bit > 0; --bit){
clockStateIndex = clockSource.nextClearBit(clockStateIndex);
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;
bitSet(i2cData, data.get(testIndex), bit);
}
}
如您所见,代码:
clockStateIndex = clockSource.nextClearBit(clockStateIndex);
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;
重复很多次。我无法创建#defines 来简化我的代码,比如 nextBit(); 替换该代码。有没有其他方法可以简化它?如果创建一个方法,我将必须传递两个大小约为 200 个元素的 BitSet 并返回 2 个 int 元素(我不知道在 Java 中这样做很热,因为我没有像 C 中那样的指针)
希望你能帮我 :)