oops hah yeah 4us
i did the first rev off of pulseIn and then realized that it wouldn't work(servo slow) with other stuff happening. thats why i used your code on the next rev
and what do you mean by mis-using? this is my main loop:
void loop()
{
// create local variables to hold a local copies of the channel inputs
// these are declared static so that thier values will be retained
// between calls to loop.
static uint16_t thrIn;
static uint16_t ailIn;
static uint16_t aux1In;
static uint16_t aux2In;
// local copy of update flags
static uint8_t bUpdateFlags;
// check shared update flags to see if any channels have a new signal
if(bUpdateFlagsShared)
{
noInterrupts(); // turn interrupts off quickly while we take local copies of the shared variables
// take a local copy of which channels were updated in case we need to use this in the rest of loop
bUpdateFlags = bUpdateFlagsShared;
// in the current code, the shared values are always populated
// so we could copy them without testing the flags
// however in the future this could change, so lets
// only copy when the flags tell us we can.
if(bUpdateFlags & ailFlag)
{
ailIn = ailShared;
}
if(bUpdateFlags & thrFlag)
{
thrIn = thrShared;
}
if(bUpdateFlags & aux1Flag)
{
aux1In = aux1Shared;
}
if(bUpdateFlags & aux2Flag)
{
aux2In = aux2Shared;
}
// clear shared copy of updated flags as we have already taken the updates
// we still have a local copy if we need to use it in bUpdateFlags
bUpdateFlagsShared = 0;
interrupts(); // we have local copies of the inputs, so now we can turn interrupts back on
// as soon as interrupts are back on, we can no longer use the shared copies, the interrupt
// service routines own these and could update them at any time. During the update, the
// shared copies may contain junk. Luckily we have our local copies to work with :-)
}
// we are checking to see if the channel value has changed, this is indicated
// by the flags. For the simple pass through we don't really need this check,
// but for a more complex project where a new signal requires significant processing
// this allows us to only calculate new values when we have new inputs, rather than
// on every cycle.
if(bUpdateFlags & thrFlag)
{
if(thrIn > midValues[0] + jitterThresh) //deadspace, forward
{
//FWD
digitalWrite(In1, LOW); //set dir
digitalWrite(In2, HIGH); //set dir
//GO!
thrIn = map(thrIn,midValues[0],calibValues[3],0,255);
analogWrite(EnA, thrIn);
}
else if (thrIn < midValues[0] - jitterThresh)
{
//rev
digitalWrite(In1, HIGH); //set dir
digitalWrite(In2, LOW); //set dir
//GO!
thrIn = map(thrIn,midValues[0],calibValues[2],0,255);
analogWrite(EnA, thrIn);
}
else if((thrIn > midValues[0] - jitterThresh) && (thrIn < midValues[0] + jitterThresh)) //stick is centered
{
digitalWrite(EnA,LOW); //disable LM298
digitalWrite(brakeLEDPin, LOW);
}
if(millis() > brakeTime2)
{
if(thrIn > thrIn1)
{
digitalWrite(brakeLEDPin, LOW);
}
brakeTime = millis();
brakeTime2 = millis() + 100;
if(thrIn < thrIn1)
{
digitalWrite(brakeLEDPin, HIGH);
}
}
if(millis() > brakeTime && millis() < brakeTime2)
{
if(thrIn > thrIn1)
{
digitalWrite(brakeLEDPin, LOW);
}
thrIn1 = thrIn;
}
}
if(bUpdateFlags & ailFlag)
{
//servo values: 12, left 42 ,right
TurnServ.write(map(ailIn,calibValues[0],calibValues[1],12,42));
//TURNING-----------------------------------------------------------
//RIGHT--------------------
if(ailIn > (calibValues[3] - ((calibValues[3] - midValues[1])/4))) //if current ailvalue is greater than 3/4 of mid to max value, turn on right blinker
{
if(millis() > lastTimeR)
{
blinkR =!blinkR;
digitalWrite(rightLEDPin,blinkR);
lastTimeR = millis() + 100;
}
}
else
{
digitalWrite(rightLEDPin, LOW);
}
//LEFT--------------------
if(ailIn < (calibValues[2] + ((midValues[1] - calibValues[2])/4))) //if current ailvalue is less than 3/4 of mid to min value, turn on left blinker
{
if(millis() > lastTimeL)
{
blinkL = !blinkL;
digitalWrite(leftLEDPin,blinkL);
lastTimeL = millis() + 100;
}
}
else
{
digitalWrite(leftLEDPin, LOW);
}
}
if(bUpdateFlags & aux1Flag)
{
//HEADLIGHTS--------------------------------------------------------
if(aux1In < ((calibValues[4] + calibValues[5])/2))
{
digitalWrite(headLEDPin, LOW);
}
else //high
{
digitalWrite(headLEDPin, HIGH);
}
}
if(bUpdateFlags & aux2Flag)
{
//aux2In
}
you can see that i copy them to a new variable (ailIn) from the shared (ailInShared) while interrupts are disabled and then use the copied ones in the rest of the loop. i changed the reg names because they bothering me with all caps and their length. 
i'm using a turnigy 9x with stock RX that im using for my quad so maybe it just a cheapness issue. maybe frsky will help eventually?