Академический Документы
Профессиональный Документы
Культура Документы
DESCRIPCIÓN:
En esta practica el alumno comprenderá la arquitectura de memorias dentro del DSK C6713, interna
y externa. Además del manejo de datos y cómo es que el compilador maneja éstos en las diferentes
secciones que pueden contener.
MATERIAL:
INTRODUCCIÓN:
La memoria interna del DSP está constituida por dos partes, Nivel 1 y Nivel 2.
El Nivel 1 consiste en dos memorias caché de 4KB, una para programa y la otra para datos. Como
estas memorias solo se son configurables como caché, no se mostrarán en el mapa de memoria. (El
manejo de la memoria caché se discutirá en practicas posteriores).
El Nivel 2 consiste en 256KB de RAM y cerca de ¼ puede utilizarse como caché. (Si un segmento es
configurado como caché, no se mostrará en el mapa de memoria). Esta será memoria indefinida, esto
es, puede contener código o datos.
• Memoria de Nivel 1
1. Siempre caché (No en mapa)
2. L1P (programa), L1D (Datos)
• Memoria Nivel 2 (L2)
1. 192KB RAM (programa o datos)
2. Hasta 64KB de caché
Por otra parte la memoria externa está dividida en 4 rangos externos CE (Chip Enable): , ,
, , por interfaz de memoria externa (EMIF), cada una de 1Gbytes. Cada espacio CE puede
contener memoria de programa o memoria de datos usando memoria síncrona o asíncrona. Las
direcciones de memoria que cae fuera de los rangos no se usan.
En el siguiete mapa de memoria se muestra el total de memoria disponible que tiene el C6713 y
cómo la memoria es usada en el DSK C6713.
Secciones
Si se analiza un programa en C, notará que contiene código y diferentes tipos de datos (globales,
locales, etc.).
• Variables Globales
• Valores iniciales para variables globales
• Variables locales
• Código (Las instrucciones)
• Funciones estandar I/O
A continuación se listan las secciones creadas por el compilador. Junto con la descripción, se
proporciona el nombre de la sección definido por el compilador:
¿Dónde anticiparías que deberían colocarse estas secciones dentro de la memoria? Intenta colocar
las 5 secciones siguientes y menciona por qué las ubicaste ahí.
Ahora que hemos definido estas secciones y dónde queremos colocarlas, se crearán las areas a las
que serán enlazadas.
1. Definir las diferentes regiones de memoria (RAM en chip vs. EPROM vs. SDRAM, etc.)
2. Describir que secciones van en que región de memoria.
3. Correr el enlazador (linker) con “build” o “rebuild”.
DESARROLLO:
Primero, para crear un área especifica de memoria, abra el archivo .cdb, click derecho en
Memory Section Manager y seleccione “Insert MEM”. Nombre esta área de manera únca y
luego especifique su base y longitud. Una vez creada, puede colocar secciones en ella.
Secciones Inicializadas
La memoria ROM es una forma de memoria inicializada. Después de encender el DSK la memoria
ROM aún contiene sus valores, en otras palabras, es inicializada después de encender. Por lo tanto,
para que nuestro sistema funcione, las secciones inicializadas deben “existir” antes de que corramos
nuestro código.
Cuando usamos el cargador del CCS (File:Load Program…), el CCS automáticamente copia cada
sección inicializada (.text, .switch, .cinit, .pinit, .const, etc.) en memoria volátil del objetivo (target)
seleccionado.
(Más adelante se examinarán otras formas de localizar secciones de código y datos inicializados.
Tendremos la oportunidad de grabarlos en memoria Flash y reubicarlas en tiempo real).
Cuando se haya terminado de crear las regiones de memoria y asignado las secciones a estas
áreas de memoria (ej. Cuando salvas el archivo .CDB), la herramienta de configuración del
CCS crea cinco archivos. Uno de los archivos es cfg.cmd, que es un archivo de comando
enlazador.
Este archivo contiene dos partes principales, MEMORIA y SECCIONES. (Aunque si se abre y
examina el archivo, no estará tan bien presentado como en la figura siguiente.
El proposito principal del linker es enlazar varios archivos de objetos. Combina las secciones
de entrada con el mismo nombre de los diversos archivos de objetos y coloca cada nueva
sección de salida en ubicaciones específicas en la memoria. En el proceso, resuelve
(proporciona direcciones reales para) todos los símbolos descritos en tu código.
El Linker puede crear dos salidas, el archivo ejecutable (.out) y un reporte que describe los
resultados del enlace (.map). (El Linker corre automáticamente cuando se realiza la
compilación).