LENGUAJE C PARA SISTEMAS DEDICADOS

Documentos relacionados
Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Programación Estructurada

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Elementos de un programa en C

Apuntadores (Punteros)

Programación estructurada (Introducción a lenguaje C)

Lanzamiento de nueva versión KIT PLUGIN_AW... Ahora aprender C es más fácil!

Tema 2. El lenguaje JAVA

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

LENGUAJE. Tema 2 Elementos de un programa

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

Lanzamiento de nueva versión KIT PLUGIN_AW... Ahora aprender C es más fácil!

El lenguaje C. 1. Identificadores, constantes y variables

2.2 Nombres, Ligado y Ámbito

Lenguaje C Elementos de un Programa. Ing. Hugo Fdo. Velasco Peña Universidad Nacional 2006

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

Registros SFR vistos hasta ahora: Microcontroladores PIC

Fundamentos de JAVA. Angel Kuri Enero, /2/2006

MICROPROCESADORES II LENGUAJE C EN LOS MICROCONTROLADORES PIC

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Ficha de Aprendizaje N 13

FUNCIONAMIENTO DEL ORDENADOR

Java para programadores

LENGUAJE. Tema 1 - Introducción

Programación en C para Sistemas Embebidos

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

Se guardan en archivos con extencion c y los cabezales con extension h

Principios de Computadoras II

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

Conceptos de Arquitectura de Computadoras Curso 2015

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Introducción al PLC Simatic Siemens S7-200.

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

La familia PIC18 USB posee 4 timers: Timer0, Timer1, Timer2 y Timer3, cada uno de los cuales tiene sus características únicas.

Introducción a la arquitectura de computadores

Descripción y Contenido del Curso. Programación C++ Capacity Academy.

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

Control Digital en PC con MS-DOS

Operadores. Javier Fernández Rivera -

El lenguaje C. if (a>3) { printf("hola"); // bloque printf("%d",a); // de getch(); //código } Partes de un programa en C.

Operadores de comparación

BIBLIOGRAFIA TEORIA DE CIRCUITOSY DISPOSOTIVOS BOYLESTAD ELECTRONICA DIGITAL TOKHEIM SISTEMAS DIGITALES TOCCI

Contenido. Capítulo 1. Introducción a lenguaje C 1

TIPOS DE DATOS BASICOS EN LENGUAJE C

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN

Dependiendo del dispositivo usado, se tienen hasta 5 puertos de entrada/salida disponibles: PORTA PORTB PORTC PORTD PORTE

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Introducción al lenguaje C. Procesadores Digitales de Señal

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Laboratorio de Arquitectura de Redes. Punteros en lenguaje C

Introducción a Java LSUB. 30 de enero de 2013 GSYC

Elementos léxicos del lenguaje de programación C

Memoria Dinámica. Jornadas de Marzo 2010 Grupo de Usuarios de Linux Tania Pérez

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Introduccion al Lenguaje C. Omar Andrés Zapata Mesa Grupo de Fenomenología de Interacciones Fundamentales, (Gfif) Universidad de Antioquia

Programación de Computadores 4 Iteraciones y Decisiones. Prof. Javier Cañas. Universidad Técnica Federico Santa María Departamento de Informática

Fundamentos de Programación Visual Basic

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Práctica 3: El teclado del PC

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Clases y Objetos. Informática II Ingeniería Electrónica

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

Objetivos. Objetivos. Arquitectura de Computadores. R.Mitnik

Algoritmos y Programación I

Paso de parámetros y gestión del marco de pila

DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT

Curso de Programación Avanzada en C

Tema 6. Gestión dinámica de memoria

INDICE 1. Operación del Computador 2. Sistemas Numéricos 3. Álgebra de Boole y Circuitos Lógicos

Datos y tipos de datos

Arquitectura de Computadores. Apellidos, Nombre:

Datos y tipos de datos

Un identificador le da nombre único a un elemento en un programa (Variables, procedimientos, etc.). No puede contener operadores como + - * /

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Las plantillas permiten definir funciones genéricas.

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Funcionamiento de la Pila (o stack)

Guía rápida para gestionar el puerto paralelo del PC

INDICE Capitulo 1. Álgebra de variables lógicas Capitulo 2. Funciones lógicas

Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

El nivel ISA (II)! Conjunto de Instrucciones

Resumen de Sintaxis en C

SISTEMAS OPERATIVOS Arquitectura de computadores

Presentación. Programación I. Conceptos Avanzados de Programación. :: Prof. Yeniffer Peña

PROGRAMACIÓN EN C para uc MCS-51

4. Operadores Operador asignación

(1) Unidad 1. Sistemas Digitales Basados en Microprocesador SISTEMAS BASADOS EN MICROPROCESADORES. Grado en Ingeniería Informática EPS - UAM

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Transmisi n de Datos a Trav s de un PIC

El lenguaje C: Elementos básicos del lenguaje

PRACTICA #1. Aprender a programar una interrupción software empleando C y/o Ensamblador.

Introducción a C Primera parte Sofía Vitale

Introducción al lenguaje C

OPERADORES Y EXPRESIONES

Esquema de partida. Maximum Operating Supply Voltage 5.5V USB 1 USART 1

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Qué ofrece la programación en AutoCAD? Qué necesito para empezar a programar? Qué es C# y.net? Autor: Jorge A. Díez Pomares Laboratorio de C.A.D.

6 MODULACIÓN DE ANCHO DE PULSO (PWM)

Transcripción:

LENGUAJE C PARA SISTEMAS DEDICADOS

FUNDAMENTOS

Computadora Se dispone de un S.O. El S.O. inicia y configura los periféricos. El S.O. brinda al usuario subrutinas para utilizar los periféricos ( system calls ).

Microcontrolador No posee un S.O. El firmware debe iniciar los periféricos. El usuario debe crear sus propias subrutinas para utilizar los periféricos.

En lenguaje C para sistemas dedicados no podemos hacer: printf( Hola Mundo );

Llamada a la función main A pesar que main es el punto de entrada al programa, el firmware realiza tareas previas a main. Entre ellas. Cargar registros de configuración. Limpiar zonas de RAM. Cargar el puntero de pila SP.

Código en ensamblador ORG $EE00 configuración de los periféricos ricos. BRA $

Código en C ORG $EE00 código de inicialización CALL/JMP main void { } main(void) código escrito por el usuario while(1) { }

Recursos

Arquitecturas de memoria

Modelo tiny ( Freescale ) MOV PORTA,PORTB

Modelo small ( Freescale ) LDA PORTA STA var1

Pasaje de parámetros Al igual que en un computadora, la pila se utiliza para el pasaje de parámetros: int funcion(char a, int b, float c,.)

Ejemplo de pasaje de parámetros usando la pila void main(void) { int dunga, donga; dunga = 3; donga = 5; dunga = suma(dunga, donga); } donga = resta(dunga, donga); int sum(int s1, int s2) { return s1 + s2; } int resta(int r1, int r2) { return r1 r2; }

Pasaje de parámetros usando la pila Ventajas: Al retornar de la función se libera el espacio de memoria. Desventajas: Llamados anidados a funciones pueden limitar la RAM libre.

Uso del heap Se hace declarando variables estáticas externas, mas conocidas como VARIABLES GLOBALES.

Ejemplo de pasaje de parámetros usando el heap iint dunga, donga; void main(void) { dunga = 3; donga = 5; suma(); resta(); } int { } suma(void) dunga = dunga + donga; int { } resta(void) dunga = dunga - donga;

Pasaje de parámetros usando el heap Ventajas: Pueden anidarse los llamados a funciones sin que crezca la pila enormemente. Desventajas: La memoria usada en el heap no puede liberarse.

Uso de las funciones recursivas void factorial(int n) { if(n == 1) return 1; else return factorial(n-1) * n; } factorial(8);

Variables

Tipos de datos básicos En PC: char: 1 byte int: 2 ó 4 bytes float: 4 bytes En microcontroladores: char: 1 byte int: 2 bytes float: 4 bytes

Variantes de los tipos básicos Se admiten los modificadores signed y unsigned. También los modificadores short y long. El float puede no estar contemplado en versiones gratuitas de los compiladores.

Operaciones básicas Aritméticas Suma + Resta Multiplicación * División / Resto % Lógicas AND & OR XOR ^

No necesariamente existe en ensamblador una instrucción para realizar cierta operación aritmética. Ej: Los PIC 16F no cuentan con instrucciones de multiplicación. En ese caso el compilador debe generar un algoritmo en assembler que ejecute esa operación.

Alternativas al tipo float En general queremos representar cifras del tipo: 20,3 mv Se trata de un número decimal de punto fijo. Tampoco se dispone de representación en punto fijo.

Solución: Trabajar las mangintudes multiplicadas x10, x100, La cifra 20,3 se almacena como 203. Así puede contenerse en un tipo int.

Manejo de bits como variables Es válida aplicar una asignación a un bit. Son válidas las operaciones lógicas entre bits, & y ^. Ejemplos: Freescale: PTAD_PTAD4 = 1; PIC: PORTBbits.RB4 = 0;

Volatile Código en C void findecuenta(void) { if(time == 100) { time = 0; } } Posible compilación en ensamblador: findecuenta: LDA time CMP #!100 BNE CLR time

Volatile Si time no cambia antes del if, la compilación anterior es válida. Si time proviene del módulo timer puede modificarse entre que es cargada y el if.

Solución Código en C: volatile int time; void findecuenta(void) { if(time == 100) { time = 0; } } Compilación en ensamblador: findecuenta: LDA time CMP #!100 BNE CLR time

Reseña de punteros Se declaran y usan de la forma convencional: int *p; char *p; int hola; p= &hola; *p = 3; ( hola = 3 )

Punteros a RAM int int hola; *p; p = &hola; *p = 3; p apunta a una posición en RAM.

Punteros a ROM char char *p; texto[20] = Hola mundo ; p = texto; p apunta a una posición en ROM (FLASH).

Arquitectura Von Neumann ( Freescale ) La RAM y ROM están en un mismo mapa. Pueden accederse por una única clase de punteros.

Arquitectura Harvard ( PIC ) La RAM y ROM están en mapas diferentes. Se deben indicar a que mapa apunta el puntero.

Punteros en micros Hardvard Punteros a RAM: char char p = &hola; hola; *p; Punteros a ROM: const char rom char rom *p; p = texto; texto[20] = me duermo ;

Entrada y salida

En la computadora Acceso al I/O de entrada: a = getch(); Acceso al I/O de salida: printf( Hola mundo );

Sistema dedicado Crear bibliotecas de funciones: LCD_printf(char *texto); LCD_Dato(char caracter); LCD_gotoxy(char x, char y);

sprintf resuelve todo Genera textos. Convierte datos int a BCD. Convierte datos float a BCD. Permite generar salidas en formatos muy complejos. sprintf(texto, Chau ); sprintf(texto, %d, a); sprintf(texto, %f, d); sprintf(texto, V = %02.1f mv, voltios);

Uso de los puertos de E/S Acceso a pines individuales: struct { byte PTAD0:1 byte PTAD1:1 byte PTAD2:1 byte PTAD3:1 byte PTAD4:1 byte PTAD5:1 byte PTAD6:1 byte PTAD7:1 }Bits; Bits.PTAD0 = 1;

Mas sobre puertos Acceso a todo el puerto: typedef { byte struct { }Bits; }PTADSTR; union Byte; byte byte byte byte byte byte byte byte PTAD0:1 PTAD1:1 PTAD2:1 PTAD3:1 PTAD4:1 PTAD5:1 PTAD6:1 PTAD7:1 PTADSTR.Byte = 0xff; PTADSTR.Bits.PTAD0 = 1; PTAD_PTAD0 = 1;

Manejo de periféricos En PC usando system calls. En microcontroladores: Freescale: Asistentes de configuración ( Processor Expert ) Funciones de biblioteca. En PIC: Bibliotecas.

Processor Expert Permite configurar cualquier módulo del microcontrolador.

Processor Expert Pueden configurarse todos los parámetros del módulo.

Processor Expert Genera el código de inicialización Genera funciones para el manejo de módulo. Genera vectores de interrupción.

Bibliotecas para PIC A/D Comparador EEPROM I2C PWM

Temporización

Demoras cortas Intercalando código en ensamblador: unsigned char contador_1; asm { LDA #$32 STA contador_1 dem_100us_1: NOP NOP NOP T total = 50 x 2µs = 100µs T int = 10 ciclos x 200ns = 2µs DBNZ contador_1,dem_100us_1 }

Demoras largas Intercalando código en ensamblador: unsigned char contador_1; unsigned char contador_2; unsigned char contador_3; for(contador_3 = 0; contador_3 < 100; contador_3++) for(contador_2 = 0; contador_2 < 20; contador_2++) { asm { LDA #$C8 STA contador_1 dem_1s_1: NOP NOP NOP DBNZ contador_1,dem_1s_1 } } T total = 100 x 10ms = 1s T ext = 20 x 500µs = 10ms T int = 250 x 2µs = 500µs

Demoras largas Módulo timer con interrupciones: void main(void) { TI1_SetPeriodSec(1); } ISR(TI1_Interrupt) { (void)tpm1c0sc; TPM1C0SC = 0x80; } (código del usuario)

Código bloqueante Durante el llamado a una función el programa no continúa su ejecución hasta retornar de ella. Ej: void main(void) { demora_seg(1); }

Código no bloqueante El programa puede continuar con otras tareas mientras una función no entregue los resultados deseados. Ej: void main(void) { } ISR(TI1_Interrupt) { (void)tpm1c0sc; TPM1C0SC = 0x80; } (código del usuario)

Timer tick de la PC Produce interrupciones cada 1ms. El usuario puede generar eventos por timer tick. El usuario no debe atender la interrupción. void fastcall TForm1::Timer1Timer(TObject *Sender) { ( código del usuario ) }

Eventos de timer con microcontroladores La velocidad del timer tick es determinada por el firmware. Pueden generarse eventos por timer tick. El usuario no debe atender la interrupción. void TI1_OnInterrupt(void) { ( código del usuario ) }

Interrupciones

Arquitectura PIC Existen 1 ó 2 vectores de interrupción. El usuario debe determinar con un if que periférico disparó la interrupción. #pragma code low_vector=0x18 void interrupt_at_low_vector(void) { _asm GOTO low_isr _endasm } #pragma code #pragma interruptlow low_isr void low_isr(void) { }

Arquitectura Freescale El Processor Expert resuelve buena parte del código. Existen vectores independientes para cada evento y periférico. El usuario no debe atender una interrupción. El Processor Expert genera el código que lo hace.

Evento de conversión A/D word AD1_OutV; ISR(AD1_Interrupt) { ((TWREG*)(&AD1_OutV))->b.high = ADC1RH; ((TWREG*)(&AD1_OutV))->b.low = ADC1RL; OutFlg = TRUE; AD1_OnEnd(); ModeFlg = STOP; } void AD1_OnEnd(void) { unsigned int medicion; }

CHAU!