コードのブロックを何度も実行する必要がある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;
何度も繰り返されます。nextBit();のようなコードを単純化するために#definesを作成することはできません。そのコードを置き換えます。それを単純化する他の方法はありますか?メソッドを作成する場合、サイズが約200要素の2つのBitSetを渡し、2つのint要素を返す必要があります(Cのようなポインターがないため、Javaでそれを行うのがホットかどうかはわかりません)
あなたが私を助けることができることを願っています:)