02_Repaso.de.C(1)
Short Description
Download 02_Repaso.de.C(1)...
Description
Sesión 02: Repaso del lenguaje C
A g e nd a para pa ra la l a c la lase se
1
2
3
Generalidades del lenguaje de programación
más popular del mundo.
Directivas del preprocesador Usadas en el
lenguaje C.
Operadores, variables estructuras de control
Tratamiento , uso, definición y ámbito
B i b l i o g r af ía
Bibliografía para la clase Jonathan Valvano, Developing Embedded Software in C Using ICC11/ICC12/Hiware. C for Embedded Systems.
Academia Freescale Semiconductor Semiconductor para Profesores 2004.
A continuación continuación… …
Generalidades del lenguaje C
Directivas del preprocesador
Operadores, variables y Control
Gen eralid ad es del Leng u aje C
Algunas preguntas sobre C
¿Qué es el lenguaje C? • Lenguaje de Programación desarrollado por Dennis Ritchie en
1971 inicialmente para la implementación de Sistemas Operativos UNIX, Compiladores, Ensambladores, Kernels.
¿Una de sus mejores características? • Portabilidad del código en diferentes sistemas Hardware.
¿Clasificación del lenguaje C? • Lenguaje de medio nivel : Combina elementos de lenguajes de
alto nivel con elementos de lenguajes de bajo nivel. Predomina el Alto Nivel.
Or íg en es d el l en g u aje C • Dennis Ritchie
(Laboratorios Bell) en 1972, cuando trabajaba en el diseño del sistema operativo UNIX, como evolución del anterior lenguaje B.
• El ‘C’ se creó como
herramienta para programadores, en consecuencia su principal objetivo es ser un lenguaje útil.
Or íg en es d el l en g u aje C
El desarrollo de C fue el resultado del deseo de los programadores de jugar
Space Travel en el procesador GE635.
Thompson y Ritchie no tenían suficiente control sobre la nave.
Para evitar colisiones con los asteroides y lo intentaron portar para PDP-7 que era un procesador de prestaciones más altas. Oh sorpresa, la migración era un verdadero dolor de cabeza.
Or íg en es d el l en g u aje C • El PDP-7 no tenía SO entonces se vieron
1
forzados a escribir uno. • El PDP-11 si contaba con uno. • Luego quisieron portar el SO del PDP-11 al PDP7 pero era muy costoso porque estaba en ensamblador. • Decidieron usar un lenguaje de alto nivel que
2
permitiera portar el SO consideraron usar B, pero carecía de funcionalidades para aprovechar las caracteristicas del PDP-11. • Así que decidieron crear nuevo lenguaje. (C).
Evo lu c ión d el len g u aje C
En 1973, el lenguaje C se había vuelto tan potente que la mayor parte el Kernel Unix, originalmente escrito en el lenguaje ensamblador PDP11/20, fue reescrita en C. Éste fue uno de los primeros núcleos de sistema operativo implementados en un lenguaje distinto al ensamblador.
Evo lu c ión d el len g u aje C
Gen eralid ad es del Leng u aje C
Lenguaje Ensamblador
Una misma aplicación deberá ser diseñada para cada procesador si ellos tienen diferentes filosofías de diseño Algoritmo
Código
Código
Código
Código
ASM x86
ASM ARMv9
ASM m68k
ASM PPC
INTEL x86
ARMv9
m68k
Power PC
Código de máquina
Gen eralid ad es del Leng u aje C
Lenguaje C
Una misma aplicación puede ejecutarse en diferentes procesadores, solo es necesario volverla a compilar Algoritmo
Código
Comp x86
Comp
Comp
Comp
ARMv9
m68k
PPC
ARMv9
m68k
Power PC
Código de máquina INTEL x86
Gen eralid ad es del Leng u aje C
Algunas preguntas sobre C
: C manipula la Contragenerado Contra: El código
¿Por qué se utiliza C? memoria sin laque intervención puede ser más grande
del usuario. si sepuede hacedirecta en ASM. ser más productivo. • Debido a la flexibilidad, se : Mediante aplicación muypunteros y Pro: UnaPro • Lenguaje pequeño, estructurado, mediano nivel. haciendo uso del Linker, es compleja en ASM es muy Contra: Una mala posible decir a C como difícil de depurar. implementación en C puede ¿Por qué no usar C? Contrautilizar : Las optimizaciones no la memoria más acabar con el Stack. : Explícitamente, Contra tienen en cuenta el C no • Código generado. eficientemente. : C directamente no Contra : Mediante el linker, es Pro permite manipular el mapa de funcionamiento del Hardware. maneja interrupciones. modificar enpalabras cierto • Asignación dinámica deposible memoria. memoria. : Existen Pro Con algunas se a C y Pro:nivel el manejodirectivas del Stack. : Existen algunas directivas Pro reservadas para indicarle • Uso de la pila. pueden laslinker parámetros que que noemplear lleve adel cabo ciertas interrupciones. • Optimizaciones. permiten hacer esto. optimizaciones. • Acceso al mapa de memoria.
• Interrupciones.
Gen eralid ad es del Leng u aje C
Diferencias principales entre Sistema Embebido y computador tradicional.
Memoria RAM limitada. Problema: Sistemas Memoria ROM limitada. embebidos con poca cantidad Espacio para el Stack limitado. de memoria. Pro: Codificación eficiente Programación orientada al hardware. usando tipos de datos : Normalmente Problema Manejo de eventos: Interrupciones. pequeños y modosendeC, el cuando se programa Otras. usodireccionamiento del hardware es cortos. problema del S.O. Pro: Existen alternativas con C para manejar directamente el hardware.
Gen eralid ad es del Leng u aje C
Ventajas
Lenguaje estándar. Se puede realizar código estructurado. Más productivo (se hace más en menos tiempo). Fácil de comprender. Código reutilizable. Bibliotecas estándar. Portabilidad entre diferentes plataformas. No se requiere un conocimiento profundo de la arquitectura de los procesadores.
Desventajas
Los compiladores pueden generar programas que demande muchos recursos (Flash y RAM). En algunos casos, las herramientas de compilación y depuración son costosas. Errores por parte del compilador. Pérdida de control, sobre algunos aspectos de bajo nivel del procesador.
Módulo de Programa
Directivas Preprocesador Declaración de Variables, prototipos
5 Variables, 4 uso de funciones 3 Función main() Obligatoria!!!2 1 Ciclo infinito 0 Atención a interrupciones
Palab ras Res erv ad as
Operadores
A continuación…
Generalidades del lenguaje C
Directivas del preprocesador
Operadores, variables y funciones
Directiv as del p repro cesado r #ifndef _MC9S08SE08_H Transforma el código _ MC9S08SE08_H #define
a ser compilado de acuerdo a ciertas directivas establecidas. #ifndef __ RESET_WATCHDOG Todas__ las directivas empiezan por #. RESET_WATCHDOG() #$55; #define asm { LDA STA SRS; Ayudan a tener un código fácilCOMA; de manejar . Por conveniencia se escribenSTA en SRS;} mayúsculas. #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
0xFFFA 0xFFE8
Directiv as del p repro cesado r
Directiva #include
#include "myfile.h" Hace que
#include
en el lugar de la directiva se incluya una copia WAIT #define WAIToasm exacta del archivo especificado (cabeceras headers) void main(void) #define CLI asm CLI { Uso de headers del CodeWarrior #define NOP asm NOP
…
unsigned char Key; #include SOPT1 =• 0x01; • #include PORT_Init(); TPM_Init(); Uso de headers propios KBI_Init(); #include
#define HIGH_BITS 0xF0 …
void main(void) { • #include “my_file.h” unsigned char Key; CLI; WAIT #define asm WAIT ¿Cómo crear un archivo header? SOPT1 = 0x01; for(;;) #define CLI asm CLI PORT_Init(); { #define NOP asm NOP TPM_Init(); WAIT; KBI_Init(); ... #define HIGH_BITS 0xF0
…
...
Directiv as del p repro cesado r
Para qué se utilizan los Headers (*.h)
Declaración de Macros (#define). • #define TRUE 1, #define DespLeft (X,Y) (X) = Menor o igual que: y); si(z>=++x); x = ((y%10)>x) z = (x>2)))
Operadores
Lógicos
AND: && OR: || NOT: !
Variables a = 0x8E, b = 0x5A, h
And: h = a && b Not: si(!(b || ~a))
Otros Operadores:
Tamaño de una variable: sizeof Ver o cambiar contenido de memoria: * Dirección de memoria de una variable: & Prueba incondicional: ?: Otros: h = sizeof(a*b)
Or: si(a || b)
Zo na de p reg un tas
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 operación. Traducción literal.
Variables en C
Todos los programas en C
Básicamente
Están construidos bajo la misma filosofía. Divide y vencerás. Existen unos datos de entrada o salida. Existen unas funciones que realizan operaciones sobre esos datos.
Los datos en C
Se manejan en su mayoría a través 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 …
Las variables también ocupan un espacio en la memoria.
Dependiendo de su naturaleza, unas variables necesitarán más espacio que otras. Los tipos de datos también determinan este espacio.
Definic ion es p revias
Las instrucciones requieren de datos y esos datos normalmente están en memoria. En ensamblador, se accede directamente a memoria con los M.D. 0x10 $00B0
LDA $B0 STA 10,X MOV #$00,$B4
En alto nivel se emplean:
$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;
Definic ion es p revias
Consideraciones en unidades de procesamiento con recursos limitados. Tipo de dato Variable de
Cantidad de Memoria. Rango de valores. Manipulación del lenguaje. • LDA $40, LDHX $41
•
…
8 bits
$00B0 Variable de $00B1 $00B2 16 bits $00B3 Variable de $00B4 32 bits $00B5 $00B6
0xA0 0x20 0x1F 0xE2 0x33 0x48 0x1D
STHX $43, … STXH $45
Modificadores
Le indican al lenguaje como manipular las variables Optimización, modificación, etc.
Definic ion es p revias
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 más. No olvide: los valores de las variables son finitos.
Definic ion es p revias
Recomendaciones
Tipo de dato lo más pequeño posible. Operaciones sin signo. Realizar casting: Cambiar tipo de dato en ejecución. • Destino = (tipo de dato)Fuente
En lo posible, no usar tipos flotantes0x10 (float) ni = 0x10; de datos$0040 unsigned char X 0x12 $0041 dobles (double). Evita gastar unsigned int A = 0x1200; 0x00 $0042 memoria 0x87 $0043 = 0x8795EF11; unsigned long B unsigned char X, Y; 0x95 innecesariamente,$0044
0xEF ; se expande $0045 unsigned int int ZX; = 200, Y = 1000 unsigned solo 0x11 $0046 Tipo de Dato Variable y Valor Ini. es necesario , Y =cuando X//Z =;Un 200MCU 1000; puede long Zunsigned = X * Y; int HC08 hacer esta operación Memoria 8-Bits unsigned Z = X * Y; long ////Z;sin Ya problemas. que el MCUMul HC08 8b no * 8blo=hace, 16b el comp. falla Z = (unsigned long) X * Y; // El comp. V6.0 los más pequeños (unsigned ) Y;extiende // Se promocionan ambas long
Ti p o s d e d a to s
El tipo determina el espacio en memoria TIPO DATO
FORMATO
MIN
MAX
char (unsigned)
8 Bits
0
255
signed char
8 Bits
-128
127
unsigned char
8 Bits
0
255
signed short
16 Bits
-32768
32767
unsigned short
16 Bits
0
65535
signed int
16 Bits
-32768
32767
unsigned int
16 Bits
0
65535
signed long
32 Bits
-2147483648
2147483647
unsigned long
32 Bits
0
4294967295
Ti p o s d e d a to s
La instrucción 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 …
Es t r u c t u r as d e C o n t ro l
if, else if, else
if (condicion_evaluar ) instrucción; else if (condicion_evaluar2) instrucción; else instrucción; if (condicion_evaluar ) { varias_instrucciones; }
NOTAS Si condicion_evaluar
es diferente de cero, condición verdadera. Si no se usan { } entonces solo se permite una instrucción. Tanto el else if como el else pueden omitirse.
Es t r u c t u r as d e C o n t ro l
switch
switch (expresión) { case Val1: Fin del caseNOTAS 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; }
Est. Con tro l de Flu jo Mientras, haga mientras while (condicion) Instrucción;
do ... while while do (condicion)
{{
Declaraciones; Declaraciones; Instrucciones; Instrucciones;
}} while (condicion);
NOTAS Si condicion es
diferente de cero, condición verdadera. Si no se usan { } entonces solo se permite una instrucción. Si al comienzo, la condición es 0, el while no se ejecuta. Ciclo do…while, se ejecuta mínimo una vez.
Est. Con tro l de Flu jo Ejemplo for unsigned char x; for (x=100; x>0; x--) { Instrucciones; }
x=100
x x == 0
x>0
Instrucciones x=x-1
Sgte. Sentencia al for
View more...
Comments