No AVR-respuesta específica:
Saltando en un ISR de una ejecución normal del hilo en general, requiere de un cambio de contexto, donde el estado actual de la CPU se guarda en algún lugar (pila, registros sombra), de modo que la ISR puede utilizar la CPU, ya que necesita, y cuando esté terminado, el ISR restaura el contexto (de modo que el programa principal, el CPU se encuentra exactamente en el estado en que se encontraba antes del ISR) y continúa. Es asíncrono, de saltar de la ejecución normal - el programa no deliberadamente decide rama, algún mecanismo externo (una señal, un poco de hardware, lo que sea) toma la decisión.
Ordinaria de la llamada de función no requiere un cambio de contexto por sí mismo. El código está siguiendo un camino conocido, así que no hay necesidad de guardar y conservar todos los registros de la CPU. Dependiendo de la función, usted puede necesitar para pasar argumentos a ella, y puede leer un valor de retorno, pero ya no está anticipándose a la ejecución normal (es decir, el programa sabe a dónde va y cuándo va allí) y no esperar a volver con todo como estaba antes de la llamada, usted no está haciendo un cambio de contexto.
Si no ves ningún cambio de contexto en el ISR de código (podría ser empuja, pops, etc.) entonces tal vez el hardware se encarga de eso para usted. En otros dispositivos (muchos Microchip partes, por ejemplo), usted necesita tomar el cuidado de el contexto de cambio en el código. En general, me sería de esperar que un ISR saltar requeriría un código extra para cuidar el contexto de cambio frente a un ingenuo vacío XXX(void) la función de llamada.
Llamar a una función desde un ISR no es tan diferente de llamar a una función en el espacio de usuario. El código de la sucursal de la misma manera como antes, con los argumentos que se pasa y valores de retorno devuelto. Si usted está en una limitada-de la pila del dispositivo, sin embargo, tenga cuidado: la llamada a la función, que estará empujando y haciendo estallar cosas y la pila que es muy probable que ya es mantener el contexto del código fuera de la ISR. Stack Overflow es siempre una posibilidad con llamadas de función anidada (recursividad es muy malo para esto).
Un ATOMIC_BLOCK contenedor de bloques de interrupciones de disparo, mientras que un segmento de código que está siendo ejecutado. Si ya estás en una ISR, supongo que esto podría impedir que el ISR de ser adelantado por otro de mayor prioridad de la ISR. Puedo entender por qué desea hacer a este, por lo que parece válida para mí (nota: yo no soy un BRAZO de expertos)