I was looking at your example with bit flags, and I'm not sure I can save any memory with that.
The way I structured the program, I'm passing the active channel to the calcInput() function using a constant, which would be replaced during compilation. Once we get to calcInput, the channel (rxChannel) and interrupt (rxInt) identifier variables are local variables. Since I'm using rxInt to index the arrays, I don't think I could use bit flags without increasing the code a fair bit, and since they are local, I'm not sure I really gain any space.
I did modify the code to remove the ulEndPeriod Array. I replaced it with a local variable ulTimeStamp that stores the value of micros() at the start of the function and assigns it either to the ulStartPeriod or uses it to calculate the pulse width depending on the condition. Seems more efficient and more accurate to do it this way.
The only arrays I have remaining are:
nChannelIn - This stores the pusle width that was calculated for each channel.
ulStartPeriod - This stores the starting time stamp for each interrupt. I understand that with most R/C systems, the signal pulses are sequential and that I could probably get away with using only one variable for this, but I've read that some of the newer spread spectrum radios don't observe this convention and I could be receiving overlapping signals. This seemed to be the safer approach since I'm using a spread spectrum radio system.
bNewSignal - Used to confirm a new signal was received for each channel.
I'll start digging into PCint now.
EDIT: Take a look at the following link:
I think this will simplify your need for additional interrupts.http://arduino.cc/playground/Main/PinChangeInt