240 likes | 380 Views
Secciones y Segmentos STARTUP. Ing. Lionel Hendryk - 2010. Sistemas Embebidos. Arquitectura similar a una computadora. Características operativas mucho más simples y específicas. Estrecha relación entre hardware y software. Ej: Balanzas Electrónicas Sistema de Inyección electrónica
E N D
Secciones y SegmentosSTARTUP Ing. Lionel Hendryk - 2010
Sistemas Embebidos • Arquitectura similar a una computadora. • Características operativas mucho más simples y específicas. • Estrecha relación entre hardware y software. • Ej: Balanzas Electrónicas Sistema de Inyección electrónica Controladores digitales de procesos
Lenguaje de Programación • Lenguaje más cercano a los dispositivos físicos y al uP -> ASSEMBLER. • Control completo del sistema. • Lógica rudimentaria y carente de estructura, lo que hace muy dificultosa su documentación y normalización. • Relación excluyente con el uP lo que implica una difícil migración de soluciones a diferente hardware.
Secciones • La organización de tipos de datos y código es importante cuando se necesita diseñar un SE (Hardware y Software). • Concepto Clásico de Memoria: Recurso Lineal. • Concepto Actual: Recurso compartido, escaso, virtual y de compleja manipulación.
La Sección • La sección implementa un modelo lineal (al estilo clásico) y representa un componente mínimo que permite generar diferentes modelos de memoria, lineales y no lineales (paginados y/o segmentados).
Aspectos de Diseño • Tipos heterogéneos de memoria. • Interfaz con lenguajes de alto nivel. • Portabilidad y reusabilidad del código. • Orden y documentación de los módulos de programa.
Definición y nomenclatura Si bien la denominación más neutral sería la de “secciones”, por tratarse de porciones de memoria lineal que componen un sistema mayor, ocurre que cuando seleccionamos una familia de microprocesadores y nos disponemos a implementar esta idea de organización lógica, encontramos una fuerte influencia de los recursos de que dispone el hardware para manejar las secciones. En el caso de la Figura 1 sería normal llamar a las secciones, páginas.
Definición y nomenclatura Si en cambio tratamos con una máquina cuyo diseño pretende separar su organización lógica de la física utilizando segmentación, veremos que los compiladores se refieren a las secciones llamándolas “segmentos”, abarcando también de manera limitada las posibilidades de las secciones.
Directivas del compilador - Segmentos Haciendo una interpretación simplificada, podemos decir que la función de un compilador es interpretar un listado de instrucciones, escrito en un lenguaje determinado de programación, y generar una secuencia de códigos binarios ejecutables por el microprocesador. La incorporación de definiciones de segmentos en los programas fuente, hace que el compilador genere distintas listas binarias, cada una de las cuales tiene asociado un nombre y mantiene un contador de direcciones como referencia de acumulación de elementos.
Directiva EXTRN El contenido de _TEXT y _DATA define su tipo como segmentos de código y datos respectivamente, sin embargo el ensamblador no define que estos segmentos sean apuntados durante la ejecución del programa por los registros CS y DS. Debemos notar que la asignación de valor al segmento de código, siempre implica una alteración del flujo del programa, por lo que no puede hacerse mediante una instrucción “MOV”.
Interfaces con lenguajes de alto nivel La mayoría de los compiladores de lenguajes de alto nivel generan como producto intermedio de la compilación, un programa en ASSEMBLER que luego es procesado por un ensamblador. En la generación de este producto, el compilador realiza un gran número de definiciones respecto de la organización de la memoria, el manejo de las secciones o segmentos, las estructura de datos y el intercambio de parámetros en las llamadas a funciones, que es necesario conocer si pretendemos combinar módulos en ASSEMBLER con lenguajes de alto nivel.
Programa en C /* Define x como variable global */ long x = 7338; /* Encabeza la función principal de C */ int main() { long a ; /* Define a como variable local */ a = x + 1; /* Opera y asigna valor */ return 0; /* Termina el programa sin error */ }
START UP • Luego de conectada la alimentación, muchos elementos de hardware y software necesitan ser configurados para su correcto funcionamiento, razón por la cual marcaremos una diferencia entre la iniciación del sistema y su operación. • Luego del RESET cualquier microprocesador inicia la ejecución de instrucciones desde una dirección físicamente fija en la memoria, habitualmente con las interrupciones enmascaradas.
Definición de la Pila • Una de las acciones prioritarias para habilitar la mayoría de las capacidades operativas del sistema es definir la pila. En la familia 80xxx esto implica asignarle valor a dos registros, el SP (puntero de pila) y el SS (segmento de pila), para que apunten a un rango de direcciones del mapa físico de memoria donde se encuentre RAM. • Como en la mayoría de los microprocesadores, la pila crece en el sentido de las direcciones decrecientes de memoria, este es otro ejemplo donde debemos diferenciar el concepto lógico, del físico, en el modelo de memoria.
La Pila La pila implementa un procedimiento secuencial de reserva de memoria, su organización es de tipo FIFO, pero admite acceso indexado sobre el espacio ocupado, utilizando un registro índice o base de pila BP. Esta modalidad de implementación facilita la optimización del uso de la memoria, pero arrastra una dificultad relacionada con la imposibilidad de predecir exactamente cuanta memoria ocupará la pila.
Inicialización de la Pila Es necesario destacar una característica de la definición de la pila en la familia INTEL 80xxx. Debido al direccionamiento segmentado, para ubicar una dirección física de memoria es necesario darle valor a dos registros (segmento y desplazamiento), en el caso particular de los punteros de pila, esta es una situación de riesgo, ya que entre las dos asignaciones los punteros están inconsistentes. Para salvar este problema el microprocesador “fusiona” la instrucción siguiente a una asignación de SS e impide que cualquier interrupción (incluso la NMI) divida las instrucciones.
Vectores de Interrupción • La familia INTEL 80xxx obtiene la dirección de todas los servicios de interrupciones mediante una tabla de 256 vectores FAR (segmento y desplazamiento) ubicada al principio del mapa físico de direcciones. ¿ Donde ubicar los vectores, en ROM o en RAM ?
Inicialización de Variables • Copia del segmento _DATA y _BSS de ROM a RAM. • Asegurar que el contenido de _BSS sean todos ¨0¨ antes de que el programa principal reciba el control. • Apuntarlos con DS para que puedan usarse como variables.