• No results found

What did not work so well: Scala type inference

5.5 Lifting collections

7.2.3 What did not work so well: Scala type inference

El procesador del Cortex-M3 es un núcleo de microcontrolador estandarizado, por lo que tiene un mapeo de memoria bien definido. A pesar de los múltiples buses internos el mapeo de memoria es un espacio de direccionamiento lineal de 4GB.

37

Figura 10 - Mapa de Memoria del Cortex – M3

El primer Gbyte de memoria está dividido a la mitad en una región de código y una de SRAM. El primer MByte de la región de SRAM y de la subsiguiente región de periféricos es direccionable por bit usando una técnica llamada bit banding. La ventaja directa de tener zonas de memoria direccionable por bit es que acceder a registros y modificar sólo algunos flags en un programa tomaría mucho menos ya que no seria necesario escribir extra código para hacerlo.

38

La ventaja de tener un mapeo de memoria estandarizado radica en que gran cantidad de código realizado para un microcontrolador puede ser porteado a otro microcontrolador Cortex de distintas prestaciones e incluso distinto

39

2.4.4 NVIC (Controlador de Interrupciones Vectoriales Anidadas)

El NVIC (Nested Vector Interrupt Controller) es el controlador de interrupciones estándar del núcleo Cortex, esto significa que todos los microcontroladores basados en Cortex tendrán la misma estructura de interrupciones, independientemente del fabricante. Por lo tanto, código de aplicación y sistemas operativos podrán ser fácilmente porteados de un microcontrolador a otro y el programador no necesitará aprender nuevos registros cada vez que se utilice nuevo hardware.

El NVIC también tiene una latencia de interrupción muy corta, esto se debe tanto al diseño del NVIC propiamente como también al set de instrucciones Thumb-2 que permite a instrucciones multiciclo ser “interrumpibles”.

La latencia de interrupción es también determinística, con varias características de manejo de interrupciones que soportan aplicaciones de tiempo real.

Como su nombre lo implica, el NVIC soporta interrupciones anidadas, así como también las interrupciones externas y la mayoría de las excepciones del sistema pueden ser programadas con distintos niveles de prioridad. Cuando una interrupción ocurre, el NVIC revisa el nivel de prioridad de la interrupción y lo compara con la prioridad de la interrupción activa. Si el nivel de prioridad de la nueva interrupción es mayor que el nivel actual, el handler de interrupción de la nueva interrupción desestimará la tarea activa y comenzará a ejecutar la nueva rutina.

40 Figura 11 - Tipos de Interrupciones del NVIC

A pesar de ser una unidad estándar dentro del núcleo Cortex, con el objetivo de mantener el número de compuertas al mínimo, el número exacto de líneas de interrupciones conectadas al NVIC se configura cuando el microcontrolador es diseñado. El NVIC tiene una interrupción no enmascarable y 240 líneas de interrupciones externas que pueden ser conectadas a los periféricos a discreción del fabricante. Hay 15 fuentes de interrupción adicionales dentro del núcleo Cortex las cuales son usadas para manejar excepciones internas dentro del mismo núcleo.

Operaciones del NVIC:

Operación de entrada y salida de una Excepción/interrupción:

Una de las ventajas del NVIC es que la mayoría de las acciones necesarias al momento de la interrupción, como guardar en la pila la dirección de retorno y algunos registros, se hacen gracias a micro-código, por lo que no es necesario escribir rutinas para esto y ahorra considerable tiempo. El tiempo que le toma al Cortex entrar a la rutina después de que la interrupción sea activada es de sólo

41

12 ciclos, igual que para salir de la rutina de interrupción y retornar a la dirección de salida.

Figura 12 - Manejo de una interrupción por el NVIC

Modos Avanzados de manejo de interrupciones:

El NVIC está diseñado además con métodos para manejar eficientemente múltiples interrupciones con el menor retardo posible entre interrupciones y siguiendo el criterio de interrupción de mayor prioridad primero. Estos métodos son los siguientes.

Interrupción por Prioridad:

En este escenario, una rutina de interrupción de menor prioridad está siendo ejecutada cuando una interrupción de mayor prioridad se dispara. En este caso, similar a como funcionaría en el caso previo, se guarda la dirección actual junto con los registros y se salta a la dirección de la rutina de interrupción correspondiente. Una vez se termine la rutina, se retorna a la dirección de salida y se sigue ejecutando la rutina de interrupción de menor prioridad.

42

Encadenamiento de Interrupciones:

Este escenario se da cuando una interrupción de alta prioridad está corriendo y una interrupción de baja prioridad se activa. En este caso, el NVIC, para asegurar que transcurra el mínimo retardo entre cada interrupción, resuelve la situación de dos formas dependiendo de la situación.

Si la interrupción de menor prioridad se activa mientras que la rutina de la interrupción de mayor prioridad se está ejecutando, una vez esta termina de ejecutarse, en lugar de tomarse 12 ciclos y volver al código de fondo, el NVIC se toma 6 ciclos para cargar la dirección de la rutina de la nueva interrupción. Una vez termina de ejecutarse la interrupción, se vuelve al código de fondo utilizando los 12 ciclos habituales.

Figura 13 - Encadenamiento de Interrupciones. Primer escenario

Si la interrupción de menor prioridad se activa cuando la rutina de interrupción activa está saliendo, en ese caso el POP de los datos de la pila será detenido y el puntero de la pila volverá a su valor original. Habrá un retardo adicional de 6 ciclos mientras que la nueva dirección se carga al PC (Program Counter). Esto implica una latencia de entre 7 y 18 ciclos antes de que la nueva rutina de interrupción empiece a ejecutarse.

43

Figura 14 - Encadenamiento de Interrupciones. Segundo escenario

Llegada Tardía:

Existe un escenario más, donde una interrupción de baja prioridad es activada primero y luego una interrupción de alta prioridad es activada. Si esta segunda interrupción es activada durante el proceso de PUSH de la primera, en ese caso el NVIC terminará de cargar los datos en la pila durante los 12 ciclos estándar pero servirá primero a la segunda interrupción (la de mayor prioridad). Luego el NVIC tratará el escenario como un encadenamiento normal.

44

Los conceptos explicados durante el capítulo han tenido como intención no sólo ilustrar los conocimientos necesarios para llevar a cabo el proyecto, sino a su vez crear una perspectiva más educada para que las decisiones tomadas descritas en los siguientes capítulos se comprendan con mayor facilidad.

45

CAPÍTULO 3: DESCRIPCIÓN DE LA ETAPA DE