¿Hay alguna guía disponible para la cantidad de código que se debe tener en una sección crítica del procesamiento controlado por interrupciones?
Mi regla de oro personal es que la parte crítica (es decir, entre inhabilitar interrupciones y habilitar interrupciones), de cualquier procesamiento dirigido por interrupciones no debe ser más de una docena de líneas de código (incluidas las de cualquier función / biblioteca). / macro llamado), y que el procesamiento debe ser lo más lineal posible.
Esperaría algo como:
disable_interrupts
if error_condition:
set_error_flag
else:
small_data_transfer
set_ready_flag
enable_interrupts
Sin embargo, se me ha pedido que examine un proyecto existente en el que algunas de las interrupciones tienen manejadores en los que los gráficos de llamadas no caben en una hoja de A1 (todo en la sección crítica).
Para aclarar esto, se trata de un proyecto "simple" sin un sistema operativo / programador implementado, y todos de los manejadores de interrupciones comienzan por desactivar todas interrupciones, es decir, los autores originales. considera que cada operación en cada ISR es crítica, (incluso el mantenimiento se encuentra dentro de una sección de habilitar / habilitar). Hay una gran cantidad de interrupciones y dependencias de hardware, pero por lo que puedo ver, algunos de los ISR ejecutarán miles de líneas dentro de la sección "crítica".
Sé que esto es un problema y realmente necesita ser reescrito por completo pero no puedo encontrar ningún estándar, incluido MISRA, al que pueda señalar en lugar de solo decir " en mi experiencia "- para convencer a la gerencia del proyecto que necesito señalar algunos estándares aceptados.
Entonces, de ahí mi pregunta: ¿Alguien puede señalarme algún estándar o guía que pueda usar para respaldar mi experiencia? (O, por supuesto, estoy totalmente equivocado).