I have a Java method which has to execute a block of code many times:
// 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);
}
}
As you can see the code:
clockStateIndex = clockSource.nextClearBit(clockStateIndex);
clockStateIndex = clockSource.nextSetBit(clockStateIndex);
testIndex = (clockSource.nextClearBit(clockStateIndex) - clockStateIndex)/2;
Is repeated lot of times. I cannot create #defines to simplify my code doing something like nextBit(); to replace that code. Is there any other way to simplify it ?
If a create a method i will have to pass two BitSet which size is about 200 elements and return 2 int elements (i dont know hot to do it in Java because i dont have pointers like in C)
Hope you can help me 🙂
I would wrap it in a function:
As for a static based method, it depends on where you are implementing the code.