Comportamiento de la función del controlador de dispositivo en la interrupción

1

Supongamos que un sistema integrado ejecuta FreeRTOS y un programa de aplicación realiza llamadas a una interfaz de controlador de dispositivo (supongamos que I2C). ¿Qué sucede exactamente cuando esto es interrumpido por una interrupción externa? Además, ¿qué sentido tiene implementar las funciones del controlador como tareas?

    
pregunta legen

2 respuestas

1
  

¿Qué sucede exactamente cuando esto se interrumpe por una interrupción externa?

La forma en que se manejan las interrupciones depende del sistema. Pero un controlador es como cualquier otro código, detendrá la ejecución temporalmente a favor de la interrupción.

  

Además, ¿qué sentido tiene implementar las funciones del controlador como tareas?

Un controlador escrito correctamente consta de dos módulos: una capa de abstracción de hardware, que es lo que llama su aplicación, y el controlador real, que es específico del sistema y no portátil.

Idealmente, el controlador debería estar completamente libre de cualquier cosa específica de la aplicación, por lo que no tiene sentido poner un controlador en una tarea del sistema operativo. Un controlador es / debería ser un nivel mucho más bajo que cosas como los sistemas operativos. Sin embargo, podría poner todo el código de la aplicación que se comunica con un determinado controlador en una tarea propia. Por ejemplo un codificador / decodificador de protocolo.

    
respondido por el Lundin
1

Un controlador de dispositivo (para dispositivos como I2C) normalmente se divide en una interfaz de aplicación y una interfaz de hardware.

La interfaz de la aplicación normalmente solo coloca los datos que desea enviar al dispositivo en un búfer, y notifica a la parte de la interfaz de hardware del controlador que hay datos para enviar, y luego regresa a la persona que llama. Pedir datos implicaría comprobar si hay suficientes datos disponibles y esperar a que los datos estén disponibles o devolverlos de inmediato.

La sección de hardware de la interfaz tomaría los datos en el búfer de escritura y los pasaría al hardware tan rápido como el hardware pueda aceptarlo. El hardware normalmente notifica al controlador, por una interrupción, para decir que ha recibido datos para procesar. , o puede aceptar más datos para transmitir.

Existe un requisito de que las secciones de hardware y aplicaciones no intenten modificar los buffers de almacenamiento compartido al mismo tiempo, y hay varias maneras en que esto se puede lograr.

El uso de interrupciones es óptimo, porque el procesador solo tiene que trabajar en el mantenimiento del hardware cuando el hardware indica que está listo. Hacer lo mismo en las tareas implica un proceso conocido como 'sondeo' que pregunta al hardware si está listo. Puede pensar que esto es análogo a apagar el timbre de su teléfono y descolgar el teléfono periódicamente para ver si alguien está llamando.

    
respondido por el Icy

Lea otras preguntas en las etiquetas