Definiciones e implementaciones básicas del sistema operativo

El paquete Rowley Crossworks (incluye compilador, IDE, interfaz de depuración, etc.) también incluye algo llamado Crossworks Tasking Library (CTL). Desde su sitio web:

Biblioteca de tareas de CrossWorks, conocida como CTL. CTL es una biblioteca de tareas libre de regalías que proporciona una función de sincronización y cambio de tareas de prioridad múltiple y preventiva. Además, la biblioteca también puede proporcionar soporte para el manejo de interrupciones y temporizadores.

Principalmente entiendo la descripción de la parte de tareas de mis investigaciones sobre los programadores de tareas (con la excepción de la sincronización... ¿qué significa eso?). Sin embargo, el soporte para el manejo de interrupciones y temporizadores me tiene completamente desconcertado. ¿Eso no está construido en el entorno gcc (que crossworks usa por cierto)? ¿Eso significa que usan algún tipo de contenedor para la sintaxis de gcc?

ISR(PORTB_INT0_vect)
{
    int_pin_handler();
}

Si es así, ¿qué ventaja ofrece poner eso en un kernel en lugar de simplemente escribir manualmente en los puertos apropiados, etc., como se haría en una programación verdaderamente completa? Finalmente, ¿es común que los sistemas operativos pequeños (estoy pensando en FreeRTOS, VxWorks no kernels de Linux) hagan este tipo de cosas?

Gracias

Respuestas (1)

El punto no es adjuntar un ISR a una interrupción, como dijiste, la mayoría de los compiladores pueden hacer eso.

El punto es lo que se le permite hacer dentro de la ISR, especialmente con las primitivas de sincronización y comunicación (bandera, semáforo, cola, buzón, etc.) que proporciona la TL. Este es un asunto complicado, porque el TL no tiene control sobre cuándo ocurre una interrupción (a menos que deshabilite las interrupciones, lo que afecta la latencia máxima de interrupción, que es una cifra muy importante para un TL). Lograr un buen equilibrio entre el aumento de la latencia de interrupción y prohibir a los ISR hacer todo tipo de llamadas TL es uno de los problemas al escribir un TL, henec 'soporte' para interrupciones significa que al menos han pensado en esto.

Vaya, me asusta lo poco que entendí de tu respuesta. Investigaré un poco más y volveré con preguntas.
¿Puede explicar qué son la sincronización y las otras primitivas de comunicación / por qué son difíciles de usar dentro de una interrupción? ¿Son los peligros de eso similares a la inversión de prioridad?
Explicar banderas, semáforos, etc. es un tema amplio, le sugiero que obtenga un libro de texto sobre RTOS, o un libro sobre uno de los RTOS específicos (eCOS, freeRTOS, et). El problema con una interrupción es que puede ocurrir mientras el RTOS está actualizando alguna estructura de datos privada, que por lo tanto es temporal en un estado inconsistente. Pruébelo usted mismo: escriba código que elimine un elemento de una cola de doble enlace y pregúntese qué sucederá, entre cada línea de código , cuando se vuelva a llamar a la misma función de eliminación. En realidad, también puede ocurrir a la mitad de una línea de código.