Download Secciones y Segmentos STARTUP

Document related concepts

Programación funcional wikipedia , lookup

Transcript
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
Controladores digitales de procesos
Comparativa PC vs. SE
PC
SE
Operación dependiente de los
programas que se carguen.
No es necesario la carga de
ningún programa, ya que su uso
es específico.
Programación independiente del
hardware.
Fuerte dependencia en sus
circuitos y programación con la
función prevista para el sistema.
Sistema Operativo (hace
transparente al programador los
recursos).
No posee sistema operativo.
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 SEGMENT
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 ;
a = x + 1;
return 0;
}
/* Define a como variable local */
/* Opera y asigna valor */
/* Termina el programa sin error */
Linkeado del modulo _DATA
Linkeado del modulo _TEXT
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.
Esqueleto de segmentos
STARTUP