02_Repaso.de.C(1)

July 8, 2019 | Author: carlos.otiniano9811 | Category: Lenguaje de programación, Compilador, Programa de computadora, Bit, Unix
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF