Professional Documents
Culture Documents
Bibliografa
Bibliografa para la clase Jonathan Valvano, Developing Embedded Software in C Using ICC11/ICC12/Hiware. C for Embedded Systems.
Academia Freescale Semiconductor para Profesores 2004.
A continuacin
2
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
Cdigo
Cdigo
Cdigo
Cdigo
ASM x86
ASM ARMv9
ASM m68k
ASM PPC
Cdigo de mquina
INTEL x86
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
ARMv9
m68k
Power PC
2010/1 Universidad de Antioquia 2009/1 2010/1
Cdigo
Comp x86
Comp
Comp
Comp
ARMv9
m68k
PPC
Cdigo de mquina
INTEL x86
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
ARMv9
m68k
Power PC
2010/1 Universidad de Antioquia 2009/1 2010/1
Contra : C manipula la Contra: El cdigo generado Por qu se utiliza C? memoria sin laque intervencin puede ser ms grande directa del usuario. si se hace en ASM. Debido a la flexibilidad, se puede ser ms productivo. Pro : Mediante punteros y Pro: Una aplicacin muy Lenguaje pequeo, estructurado, mediano nivel. es haciendo uso del Linker, compleja en ASM es muy Contra: Una mala posible decir a C como difcil de depurar. en C puede Por qu no usar C? implementacin Contra : Las optimizaciones no utilizar la memoria ms acabar con el Contra : Explcitamente, tienen enStack. cuenta el C no Cdigo generado. eficientemente. Contra : C directamente no Pro : Mediante el linker, es permite manipular el mapa de funcionamiento del Hardware. maneja interrupciones. posible modificar enpalabras cierto Asignacin dinmica de memoria. memoria. Pro : Existen Pro: Con algunas directivas se nivel el manejo del Stack. Pro : Existen algunas directivas reservadas para indicarle aC y Uso de la pila. pueden emplear laslinker que parmetros que no lleve adel cabo ciertas interrupciones. Optimizaciones. permiten hacer esto. optimizaciones.
Lenguaje estndar. Se puede realizar cdigo estructurado. Ms productivo (se hace ms en menos tiempo). Fcil de comprender. Cdigo reutilizable. Bibliotecas estndar. Portabilidad entre diferentes plataformas. No se requiere un conocimiento profundo de la arquitectura de los procesadores.
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
Mdulo de Programa
Directivas Preprocesador
Declaracin de Variables, prototipos
Palabras Reservadas
Operadores
A continuacin
a ser compilado de acuerdo a ciertas directivas establecidas. #ifndef __RESET_WATCHDOG #define Todas las directivas empiezan por #. __RESET_WATCHDOG() asm { LDA #$55; STA SRS; Ayudan a tener un cdigo fcil de manejar. COMA; Por conveniencia se escribenSTA en SRS;} maysculas. #endif Eventualmente, pueden ayudar en el uso del #define REG_BASE 0x0000 Mapa de Memoria del MCU.
#pragma MESSAGE DISABLE C1106 #define VectorNumber_IRQ #define VectorNumber_TPM1Ov
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
0xFFFA 0xFFE8
2010/1 Universidad de Antioquia 2009/1 2010/1
Directiva #include
#define RUN_MODE DEBUG Compilacin condicional, es decir, de todo el cdigo, solo algunas partes se compilarn si cumplen #if RUN_MODE == DEBUG determinada condicin. Despus del Preprocesador SERIAL_PUTS(Depuracin); Cmo == seSIM utilizan? #elif RUN_MODE SERIAL_PUTS (Sim); til para crear archivos .h. SERIAL_PUTS(Depuracin); #else
SERIAL_PUTS(Versin 1.0, Ok); #endif
File.h se inserta en el archivo main.c solo una vez, es decir, si no ha sido insertado previamente por el Preprocesador.
Juan Franco / Johnny Aguirre 2010/1 Universidad de Antioquia 2009/1 2010/1
A continuacin
Operadores
Aritmticos
Suma: + Resta: Multiplicacin: * Divisin: / Mdulo: %
Variables a = 10, b = 0x23, h
Suma: h = a + b + 100
Multiplicacin: h=b*a
Mdulo: h=b%a
Pos/Pre incremento/decremento: a = b++; h++; ++a; b = ++h h--; b = --a; b = a-Operacin y asignacin: h += a; b /= h; a %= b h *= ++b; h %= (--b)*(a++)
Aritmticos especiales
++, --, +=, -=, *=, /=, %=.
Operadores
Relacionales: se caracterizan porque evalan una condicin que puede ser verdadera o falsa
Igualdad: == Diferente: != Mayor que: > Menor que: < Mayor o igual que: >= Menor o igual que: <=
Variables x = 5, y = 12, z = 0x00 Igualdad: z = (x==y) Desigualdad: si(z!=x%y)
Mayor/Menor, Mayor/Menor o igual que: z = (x>y); si(z>=++x); x = ((y%10)>x) z = (x<=y); si(z<(x++%y)); si(!(x<=y))
Operadores
A nivel de bits
Variables a = 0xC0, b = 23, h And: h=b&a Xor: h = (b++)^(a++)
Negada: Complemento a uno: ~ h = ~(a+10) AND: & Or: OR: | h = b | (a + 0x30) XOR: ^ Desplazamiento a la izquierda: << Desplazamiento a la derecha: >>
Operadores
Lgicos
AND: && OR: || NOT: !
Variables a = 0x8E, b = 0x5A, h
And: h = a && b
Not: si(!(b || ~a))
Or: si(a || b)
Otros Operadores:
Tamao de una variable: sizeof Ver o cambiar contenido de memoria: * Direccin de memoria de una variable: & Prueba incondicional: ?:
Otros: h = sizeof(a*b)
Zona de preguntas
Determine los valores finales de i, j, Z.
#define SUMA(X,Y) ((X)*(Y) + (X) (Y)) unsigned int i = 4, j = 3, Z; Z = SUMA(--i, j++);
NOTAS
Predecremento y postincremento se hacen en cada operacin. Traduccin literal.
Variables en C
Todos los programas en C
Estn construidos bajo la misma filosofa. Divide y vencers.
Bsicamente
Existen unos datos de entrada o salida. Existen unas funciones que realizan operaciones sobre esos datos.
Los datos en C
Se manejan en su mayora a travs de variables.
Variables en C
Las variables tienen un tipo de dato asociado.
El tipo de dato habla acerca de la naturaleza de la variable. Almacena un bit, un dato decimal, un nombre de usuario
Definiciones previas
Las instrucciones requieren de datos y esos datos normalmente estn en memoria. En ensamblador, se accede directamente a memoria con los M.D. 0x10 $00B0
LDA $B0 STA 10,X MOV #$00,$B4
$00B1 $00B2 $00B3 $00B4 $00B5 $00B6 0x12 0x00 0x87 0x95 0xEF 0x11
Memoria 8-Bits
Variables Objetos (Lectura/Escritura) Se declaran con un tipo de dato y modificadores unsigned char X, const long Y;
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
Juan Franco / Johnny Aguirre 2010/1 Universidad de Antioquia 2009/1 2010/1
Definiciones previas
Consideraciones en unidades de procesamiento con recursos limitados. Tipo de dato Variable de
Cantidad de Memoria. Rango de valores. Manipulacin del lenguaje.
LDA $40, LDHX $41 STHX $43, STXH $45
$00B0 Variable de $00B1 $00B2 16 bits $00B3 Variable de $00B4 32 bits $00B5 $00B6
8 bits
Modificadores
Le indican al lenguaje como manipular las variables Optimizacin, modificacin, etc.
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
Juan Franco / Johnny Aguirre 2010/1 Universidad de Antioquia 2009/1 2010/1
Definiciones previas
Tipos de Datos.
Tipo de dato de cada variable: Define el rango de valores que puede tomar. Memoria!!! Estrechamente relacionado con el manejo de la memoria. Todo lo que se maneja en C es Memoria. Recuerde que, un CFv1 maneja de manera eficiente operaciones de 8, 16 y 32 bits, no las de 64 o ms. No olvide: los valores de las variables son finitos.
Definiciones previas
Recomendaciones
Tipo de dato lo ms pequeo posible. Operaciones sin signo. Realizar casting: Cambiar tipo de dato en ejecucin.
Destino = (tipo de dato)Fuente
memoria 0x87 $0043 unsigned long B = 0x8795EF11; unsigned char X, Y; 0x95 innecesariamente,$0044 0xEF unsigned int int Z X; = 200, Y = 1000 ; se expande $0045 unsigned solo 0x11 $0046 Tipo de Dato Variable y Valor Ini. es necesario unsigned X // =; 200 , Y =cuando 1000; puede long Z Z = X * Y; int Un MCU HC08 hacer esta operacin Memoria 8-Bits unsigned Z; Z = X * Y; long // // Ya que el MCUMul HC08 lo= hace, sin problemas. 8b no * 8b 16b el comp. falla Z = (unsigned long) X * Y; // El comp. V6.0 los ms pequeos (unsigned long ) Y;extiende // Se promocionan ambas
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
unsigned En lo posible, no tipos de datos$0040 flotantes (float) ni 0x10 char X usar = 0x10; 0x12 $0041 dobles (double). Evita gastar unsigned int A = 0x1200; 0x00
$0042
Tipos de datos
El tipo determina el espacio en memoria
TIPO DATO char (unsigned) signed char FORMATO 8 Bits 8 Bits MIN 0 -128 MAX 255 127
8 Bits 16 Bits
16 Bits 16 Bits 16 Bits 32 Bits 32 Bits
0 -32768
0 -32768 0 -2147483648 0
255 32767
65535 32767 65535 2147483647 4294967295
Tipos de datos
La instruccin typedef permite crear nuevos tipos de datos typedef tipos_datos_existentes nuevo;
Crear un tipo de dato para manejar valores de 8 bits sin signo llamado byte Crear un tipo de dato para manejar valores de 16 bits sin signo llamado word Crear un tipo de dato para manejar valores de 32 bits sin signo llamado dword
Estructuras de Control
if, else if, else
if (condicion_evaluar) instruccin; else if (condicion_evaluar2) instruccin; else instruccin;
if (condicion_evaluar) { varias_instrucciones; } NOTAS Si condicion_evaluar es diferente de cero, condicin verdadera. Si no se usan { } entonces solo se permite una instruccin. Tanto el else if como el else pueden omitirse.
Estructuras de Control
switch
switch (expresin) { NOTAS case Val1: Fin del case Val1 No se colocan { } en Instrucciones; cada case. break; Cada case debe case Val2: con break. Fin del case finalizar Val2 case Val3: y Val3 El caso por defecto se Instrucciones; emplea con default break; El break puede omitirse Fin del case default: en el bloque default. default Instrucciones; break; }
Circuitos Digitales Sistemas Embebidos Circuitos Digitales III III
Juan Franco / Johnny Aguirre 2010/1 Universidad de Antioquia 2009/1 2010/1
condicin verdadera. Si no se usan { } entonces solo se permite una instruccin. Si al comienzo, la condicin es 0, el while no se ejecuta. Ciclo dowhile, se ejecuta mnimo una vez.
2010/1 Universidad de Antioquia 2009/1 2010/1
x=100
x>0 Instrucciones x=x-1
Sgte. Sentencia al for
x
x == 0
Fin de la sesin