Tienes que pensar en el diseño de tu tarea. Usted dijo que tiene una tarea que se imprime y aparentemente tiene otra tarea de la que está llamando rendimiento. ¿Cuál es el propósito de esta otra tarea? ¿Cuándo debe ejecutarse cada tarea y cuándo debe cada bloque? ¿Cuáles deberían ser las prioridades relativas de las tareas?
Tomaré una conjetura basada en casi ninguna información. La tarea de impresión debe ejecutarse solo cuando hay algo que imprimir, de lo contrario, debería bloquearse. La otra tarea debe ejecutarse el resto del tiempo, tal vez sea la tarea inactiva o en segundo plano. En este caso, la tarea en segundo plano debe ser de baja prioridad y la tarea de impresión debe tener una prioridad más alta para que la tarea de impresión pueda anticiparse a la tarea en segundo plano cuando haya algo que imprimir.
Use algo como un semáforo o una cola para indicar cuándo se debe ejecutar la tarea de impresión. Si ya ha creado su propio mecanismo de búfer de caracteres y el controlador de interrupciones está comprobando '\ n', entonces un semáforo es probablemente bueno. La tarea de impresión debe obtener / pend / block en el semáforo. El controlador de interrupciones debe establecer / publicar el semáforo cuando se recibe '\ n'. Luego, la tarea de impresión se ejecutará e imprimirá el búfer.
Otro diseño podría ser que cuando el controlador de interrupciones obtiene el '\ n' envía todo el búfer a la tarea de impresión a través de un buzón o cola. Esto desacoplaría la tarea de impresión de tener que leer / manipular la estructura de datos de su búfer.
Otro diseño podría ser que el controlador de interrupciones publique todos los caracteres en una cola y la tarea de impresión se reduzca en la cola y almacene los caracteres en búfer hasta que se reciba un '\ n'. Esto desacoplaría el controlador de interrupciones del trabajo de interpretación de caracteres como '\ n'.