220 likes | 361 Vues
Un proyecto almacena toda la información necesaria para construir un programa individual o librería. nombres de archivo del código fuente opciones de la herramienta de generación de código incluir archivos de dependencias
E N D
Un proyecto almacena toda la información necesaria para construir un programa individual o librería. • nombres de archivo del código fuente • opciones de la herramienta de generación de código • incluir archivos de dependencias • Un proyecto simple puede contener múltiples configuraciones, por ejemplo, Debug y Release. Cada configuración del proyecto utiliza su propio conjunto de niveles de opción del proyecto cuando se construye el proyecto.
LA TARJETA DSK La tarjeta tiene un tamaño de 5x8 pulgadas, e incluye el un procesador digital de señales del tipo C6713 y un codec estéreo TLV230AIC23 (AIC23) para entrada y salida. Dicho codec utiliza tecnología sigma-delta para las tareas de ADC o de DAC. Ésta se conecta a un reloj del sistema de 12 MHz. La tasa de muestreo es variable y va del rango de 8 a 96kHz, la cual puede ser leída. Contiene dos conectores de 80 terminales capaces de permitir la conexión de interfaces de memoria externas y periféricos. Esta tarjeta incluye 16MB de SDRAM y 256kB de memoria flash. Cuatro conectores sobre la tarjeta otorgan entrada y salida a la misma: conectores de LINE IN, LINE OUT, MIC IN y HEADPHONE. Los dipswitch integrados permiten la lectura de programas y son capaces de otorgar al usuario con una interfaz de control de retroalimentación. El DSK opera a 225MHz. Se alimenta por medio de voltajes regulados de 1.26V para el corazón del 6713 y de 3.3 V para su memoria y periféricos.
EL PROCESADOR DIGITAL DE SEÑALES TMS320C6713 Está basado en la arquitectura VLIW, la cual es adecuada para algoritmos numéricos intensos. La memoria de programa interna está estructurada de un total de 8 instrucciones que pueden ser capturadas por cada ciclo. Por ejemplo, con un tasa del reloj de 225 MHz, el C6713 es capaz de capturar 8 instrucciones de 32 bits cada 1/(225 MHz) o 4.44 ns. Las características del C6713 incluyen 264kB de memoria interna (8kB como L1PD y L1D de caché, así como memoria compartida L2 entre el espacio de programa y de datos), ocho unidades funcionales o de ejecución compuestas de 6 unidades aritméticas lógicas (ALU) y dos unidades multiplicadoras, un bus de direcciones de 32 bits capaz de direccionar hasta 4 GB, y dos conjuntos de registros de propósito general de 32 bits. El C67xx pertenece a la familia de procesadores de punto flotante. El C6713 es capaz de realizar procesamiento tanto de punto fijo como punto flotante.
CREANDO UN NUEVO PROYECTO 1. Seleccionar Project->New 2. En el wizard de crear un nuevo proyecto, introduce el nombre del proyecto en el campo Project Name. EL nombre de cada archivo de proyecto dentro de una colección debe de ser único. 3. En el campo Location, especificar un directorio para almacenar el archivo de proyecto. Se recomienda utilizar diferente directorio para cada nuevo proyecto. 4. Seleccionar un tipo de proyecto de la lista correspondiente, ejecutable se generará un archivo ejecutable, mientras que librería generará una nueva librería. 5. Se debe de seleccionar el tipo de tarjeta que se encuentra conectada a la CPU. 6. Teclear Finalizar. Después de crear un nuevo archivo de proyecto, agregar los nombres de archivo de tu código fuente, objetos de librerías y el archivo de comandos del enlazador a la lista de proyectos. NOTA: No se debe intentar agregar archivos header/include al proyecto. Estos archivos se agregan de manera automática cuando los archivos fuentes son escaneados por dependencias como parte del proceso de construcción del proyecto. Todos los archivos agregados al proyecto son desplegados con nombres de trayectorias absolutas
CODE COMPOSER CodeComposer provee una Interfaz de Desarrollo de Aplicaciones que herramientas de software, tales como: un compilador de C, un ensamblador, y un enlazador. Éste tiene capacidades gráficas y soporta depuración en tiempo real. Éste otorga una herramienta de software fácil de utilizar para construir y depurar programas. El compilador de C compila programas fuente en C con extensión .c para producir un archivo fuente de ensamblador con la extensión .asm. El ensamblador ensambla un archivo fuente .asm para producir un archivo objeto de lenguaje máquina con la extensión .obj. El enlazador combina archivos objeto y librerías objeto para producir un archivo ejecutable con la extensión .out. Este archivo ejecutable representa el popular archivo COFF (formato de archivo de objeto común), en los sistemas UNIX y adoptado por muchas marcas de procesadores digitales de señal. Para crear un proyecto de aplicación, uno puede “agregar” los archivos apropiados al proyecto. Las opciones del compilador/enlazador pueden adecuadamente ser especificadas. Un número de características de depuración se encuentran disponibles, incluyendo configuración de puntos de ruptura y visualización de variables; visualización de la memoria, registros y C mezclado con código ensamblador
CREANDO UN PROYECTO NUEVO EN EL CODE COMPOSER STUDIO .lib Estalibreríadasoporte de ejecuciónpara el circuitointegrado de la tarjeta del DSP .c Este archivocontienecódigofuentequedafuncionalidad principal de un proyecto .h Este archivodeclara el buffer de unaestructura de C asícomotambién define cualquiertipo de constantesrequeridas. .pjt Este archivocontienetodos los proyectosconstruidos y opciones de configuración. .asm Este archivocontieneinstrucciones de ensamblador. .cmd Este archivomapeasecciones a la memoria. 1. Si se ha instalado el programa CodeComposer Studio en c:\CCStudio_v3.10, crear una carpeta de nombre volume1 en la carpeta de instalación de CodeComposer. 2. Copiar el contenido de la carpeta C:\CCStudio_v3.10\tutorial\target \volume1 a este nuevo folder. 3. Entrar al IDE de CodeComposer 4. Del menú proyecto, selecciona Nuevo. 5. En el campo Project Name, teclea volume1 6. En el campo Location, selecciona la carpeta que creaste. 7. En el campo Project Type, selecciona la configuración de la tarjeta y tecla Finish.
Después de realizar la tarea antes mencionada se muestran los resultados obtenidos. Ahora bien, después de llevar a cabo los pasos anteriores, se requiere agregar archivos al proyecto, para lo cual se realizan las siguientes tareas: 1. Seleccionar Project->Add. Seleccionar volume.c de la carpeta de trabajo que se ha creado, y dar clic. También se pueden agregar archivos dando clic al botón derecho sobre el icono de la vista del proyecto y seleccionando Agregar archivos o bien arrastrando los archivos dentro de los folders en la ventana de la Vista del proyecto.
2. De la misma manera selecciona archivos fuente .asm (*.a*,*.s*) en la caja de diálogo de Files of type. Selecciona vectors.asm y load.asm, y da clic en Open. Estos archivos contienen instrucciones necesarias para establecer los vectores de interrupción para mandárselas a los puntos de entrada de programas en C, c_int00. 3. Seleccionar el archivo de comandos del enlazador (*.cmd, *.lcf) en la caja de diálogo de Files of type. Selecciona volume.cmd y da clic en Open. Este archivo mapea secciones a la memoria. 4. Ir a la carpeta del compilador (C:\CCStudio_v3.10\c6000\cgtools\lib) y seleccionar archivos de Object y Library (*.lib) en la caja de diálogo Files of type. Selecciona el archivo rts7600.lib para la tarjeta que estás configurando y dar clic en Open. Esta librería otorga soporte en tiempo de ejecución para la tarjeta del DSP. Para algunas tarjetas, la librería de tiempo de ejecución puede tener un nombre de archivo más específico, por ejemplo, rts6200.lib. 5. En la ventana Project View, dar clic al botón derecho y seleccionar ScanAllFileDependences. Dar clic sobre el proyecto volume1 en la ventana de vista del proyecto para visualizar el archivo volume.h bajo la carpeta include. Cuando se construye un proyecto, CodeComposer encuentra los archivos pero buscando primero en el folder que contiene el archivo fuente y después en las carpetas listadas
Se puede notar dentro del código lo siguiente: • Después de que la función principal imprime un mensaje, se introduce en un lazo infinito. Dentro de este lazo, este llama a las funciones de procesamiento y dataIO. • La función de procesamiento multiplica cada valor en el buffer de entrada por la ganancia y pone los valores resultantes dentro del buffer de salida. Este también llama a las rutinas de carga del ensamblador, la cual consume ciclos de instrucción basados sobre los valores processingLoad pasados a la rutina. • La función dataIO en este ejemplo no realiza ninguna acción más que un simple return. Además, de utilizar código de C para realizar la I/O, se usará una punta de prueba para leer datos de un archivo en el host dentro del lugar de inp_buffer. • Se puede proceder a reconstruir el proyecto (Project->RebuildAll) • Cargar el programa (File->Load Program) • Ir a la función principal (Debug->GoMain) • Ejecutar el programa (Debug->Run) • Detener el programa (Debug->Halt) • Cambiar de visualización el código del programa (View->MixedSource/ASM)
Hasta estos momentos la porción del programa encerrada por los comandos del preprocesador (#ifdef y #endif) no corren porque FILEIO no fue definido. En esta sección, se establecerá una opción de preprocesador. Se encontrará y corregirá un error de sintaxis. Seleccionar Project->BuildOptions En la pestaña de Compiler de esta ventana, seleccionar Preprocessor de la lista Category. Teclear FILEIO en el campo Pre-Define Symbol. Presionar la tecla de tabulador. Notar que el comando del compilador en la parte superior de la ventana ahora incluye la opción –d. Ahora se incluirá el código que se encuentra después de la sentencia #ifdef cuando se recompile el programa. Al reconstruir totalmente el proyecto, éste producirá un error, se debe de cambiar la línea processing(input, output); por puts («beginprocessing»)
UTILIZANDO PUNTOS DE ROMPIMIENTO Y LA VENTANA DE OBSERVACIÓN Cuando se están desarrollando y probando programas, se requiere checar el valor de una variable durante la ejecución de un programa. Existen puntos de interrupción a nivel de hardware y de software, aunque solamente se apreciarán los de nivel de software. A continuación se describe como realizarlo: Cargar el proyecto correspondiente Seleccionar el archivo fuente en donde se desea colocar el punto de detención del programa, en este ejemplo, el archivo volume.c. Poner el cursor en la línea 61 (debajo de la función principal que indica dataIO(); Colocar un punto de rompimiento en el menú o presionando F9. Seleccionar View->WatchWindow. Posicionarse en el menú principal, Debug->GoMain Seleccionar Debug->Run, o presionar F5 para ejecutar el programa.
UTILIZANDO LA VENTANA DE OBSERVACIÓN CON ESTRUCTURAS Además de observar los valores de una variable simple, puedes observar los valores de los elementos de una estructura. Seleccionar la pestaña de Watch1 Colocar el nombre de la estructura str Teclea en el espacio en blanco para guardar la información solicitada a ser visualizada
AGREGANDO UN PUNTO DE PRUEBA AL ARCHIVO DE I/O • Una punta de prueba lee datos de un archivo sobre la PC. Las puntas de prueba son herramientas útiles para desarrollar algoritmos. Por lo regular se utilizan en: • Transferir datos de entrada de un archivo a la PC a un buffer sobre la tarjeta para ser utilizada por un algoritmo. • Transferir datos de salida de un buffer sobre una tarjeta a un archivo sobre la PC para análisis. • Actualizar una ventana, tal como un gráfico, con datos. • A continuación se mostrará como utilizar una punta de prueba para transferir el contenido de un archivo de la PC a la tarjeta para utilizar datos de prueba. • 1. Seleccionar File->Load Program. Seleccionar volume1.out. 2. Dar doble click sobre el archivo volume.c en la vista de proyecto. 3. Colocar el cursor en la línea de DataIO(); 4. Colocar un punto de prueba. El margen de selección indica que un punto de prueba ha sido seleccionado. 5. Del menú File, seleccionar File I/O.
AGREGANDO UN PUNTO DE PRUEBA AL ARCHIVO DE I/O En el archivo de la caja de diálogo I/O, cambiar la opción Address a inp_buffer y el campo Lenght a 100. También, poner una marca en la caja WrapAround. El campo Address especifica en donde el dato del archivo será colocado. El dato inp_buffer se declara en volume.c como un arreglo entero de BUFSIZE (una constante que está definida en volume.h). El campo Lenght especifica cuantas muestras del archivo de datos son leídos cada vez que la punta de prueba se alcanza. Utilizas 100 porque este es el valor establecido por la constante BUFSIZE en volume.h (0x64). La opción seleccionada de WrapAround implica que el IDE comience a leer a partir del inicio del archivo cuando se alcanza el fin del mismo. Esto permite que el archivo de datos sea tratado como una cadena de datos pares aunque contenga solamente 1000 valores y 100 valores son alcanzados cada vez que la punta de prueba sea alcanzada.
GESTIONANDO PROYECTOS En este ejercicio se creará una carpeta para contener a un proyecto y tres archivos de texto fuentes del tipo ANSI C que contienen dos funciones simples y una aplicación de prueba, esto es archivos .lib, .c y .pjt. Creando el archivo testapp.c En Windows explorer, dirigirse a C:\CCStudio_v3.10\myprojects Crear una carpeta Crear dos carpetas dentro de la anterior, con nombres diferentes Inicia el IDE de CodeComposer Del menú archivo, selecciona New->SourceFile Copia el siguiente código #include <stdio.h> intmain() { inttest_data[] = { 7, 13, 3, 25, 64, 15 }; intmax_value = maximumValue(test_data, 6); intmin_value = minimumValue(test_data, 6); // calllibraryfunctions printf( "Themaximumvalue in the data is %d\n", max_value ); printf( "Theminimumvalue in the data is %d\n", min_value ); return 0; } 7. Del menú File, selecciona Save As 8. Teclea testapp.c como el archivo y da clic en Save
GESTIONANDO PROYECTOS Creando minimumvalue.c Del menú File, seleccionar New->SourceFile Inserta el siguiente código intminimumValue( int [], int); // Requires: array_size equals the number of elements in the array, array_size > 0 // Returns: The minimum value contained in the integer array intminimumValue( int values[], intarray_size) { intminimum_value; inti = 0; minimum_value = values[0]; for (i = 0; i < array_size; i++) { if (values[i] < minimum_value) minimum_value = values[i]; } return minimum_value; } Del archivo File, selecciona Save As 4. Guarda el archivo con el nombre minimumvalue.c
GESTIONANDO PROYECTOS Creando maximumvalue.c Del menú File, seleccionar New->SourceFile Inserta el siguiente código intmaximumValue( int [], int); // Requires: array_size equals the number of elements in the array, array_size > 0 // Returns: The maximum value contained in the integer array intmaximumValue( int values[], intarray_size) { intmaximum_value; inti = 0; maximum_value = values[0]; for (i = 0; i < array_size; i++) { if (values[i] > maximum_value) maximum_value = values[i]; } return maximum_value; } Del archivo File, selecciona Save As 4. Guarda el archivo con el nombre maximumvalue.c
Del menú proyecto, selecciona Nuevo. En el campo del nombre del proyecto, teclear maxminlibrary con el nombre del proyecto. En el campo Location, teclear E:\CCStudio_v3.1\MyProjects\dos\maxminlibrary. Seleccionar el tipo de proyecto drop-down, seleccionar Library (.lib) como el tipo de proyecto. En la Target Family, selecciona la tarjeta de la familia para tu aplicación. 7. En la ventana de vista de proyecto, teclear Add Files To Project 8. Del menú de tipos de archivos, selecciona archivos fuente en C 9. Cargar los archivos maximumvalue.c y minimumvalue.c 10. Cargar el archivo de librería *.lib 11. Reconstruir el proyecto