SASE2011-Lenguaje_C.pdf

download SASE2011-Lenguaje_C.pdf

of 56

Transcript of SASE2011-Lenguaje_C.pdf

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    1/56

    RESEA DE

    LENGUAJE C

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    2/56

    VARIABLES

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    3/56

    La funcin main. Es el punto de entrada al programa.

    void main(void)

    {Aqu escribo mi programa

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    4/56

    Tipos de datos. Char. El char es una variable de 1 byte.

    Almacena nmeros enteros. Toda variable debe ser declarada.

    Ej:void main(void){

    char a;a = 3;}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    5/56

    Asignaciones Permiten darle valores a las variables.

    Ej:

    PTBD_PTBD3 = 1;PTBD = 0xff;

    a = b + c;

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    6/56

    Tipos de datos. Int. El int es una variable de 2 bytes.

    Almacena nmeros enteros.

    Ej:

    void main(void){

    int b;

    b = 1000;}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    7/56

    Tipos de datos. Float. Permite almacenar nmeros de punto flotante.

    Ej:void main(void){

    float c;

    c = 10.8;}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    8/56

    Alternativas al tipo float En general queremos representar cifras

    del tipo: 20,3 mV Se trata de un nmero decimal de punto

    fijo. Tampoco se dispone de representacin

    en punto fijo.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    9/56

    Solucin:Trabajar las mangintudes

    multiplicadas x10, x100, La cifra 20,3 se almacena como203. As puede contenerse en un

    tipo int.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    10/56

    Conversin o casting.

    Asignar un tipo de variable a un tipo distinto. Se usar el operador de conversin.Ej: Asignar a una variable int un tipo float.

    void main(void)

    { int a;float b, c;b = 3;

    c = 4;a = (int) b + 1;

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    11/56

    Modificadores. Un/Signed.

    Permiten signar las variables o ampliar

    su rango.void main(void)

    {signed char d;unsigned char e;

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    12/56

    Modificadores. Long/Short.

    Permiten ampliar el tamao de un dato

    int.Ej:

    void main(void){

    long int a;

    a = 100000;}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    13/56

    Modificadores. Double.

    Permite extender un dato float.

    Ej:void main(void)

    {double g;

    long double h;}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    14/56

    Modificadores. Resumen.

    0 a +42949672954 bytesunsigned long

    0 a +655352 bytesunsigned short

    -2147483648 a +21474836474 byteslong

    -32768 a 327672 bytesshort

    -32768 a 327672 bytessigned int0 a +655352 bytesunsigned int

    -32768 a +327672 bytesint

    -128 a +1281 bytesigned char

    0 a +2551 byteunsigned char

    -128 a +1271 bytechar

    RangoTamaoTipo

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    15/56

    Registros dedicados.

    Son perifricos mapeados en RAM.Ej: puertos, timers, etc.

    PTAD_PTAD0PTAD

    PTBD_PTBD1PTBD

    void main(void)

    {PTAD_PTAD0 = PTBD_PTBD1;

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    16/56

    OPERACIONES

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    17/56

    Operaciones aritmticas. Resumen.

    Decremento--Incremento++

    Cambio de signo-

    Resto de la divisin%Divisin/

    Multiplicacin*

    Resta-Suma+

    OperacinOperador

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    18/56

    Operaciones aritmticas.

    void main(void)

    { int a, b, c, d, e, f;a = 1;

    b = 2;c = a + b;d = a b;e = a * b;f = a / b;

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    19/56

    No necesariamente existe enensamblador una instruccinpara realizar cierta operacinaritmtica. Ej: Los PIC 16F nocuentan con instrucciones de

    multiplicacinEn ese caso el compilador debe

    generar un algoritmo en assemblerque ejecute esa operacin

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    20/56

    Operaciones acumulativas.

    a = a + 1;

    a += 2; ( a = a + 2 )a++; ( a = a + 1 )

    b -= 3; ( b = b 3 )c *= 2; ( c = c * 2 )

    d /= 10; ( d = d / 10 )

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    21/56

    Operaciones lgicas. Resumen.

    desplazamiento a la izquierda>

    negacin~

    XOR bit a bit^

    AND bit a bit&

    OR bit a bit|

    OperacinOperador

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    22/56

    Operaciones lgicas. Ejemplos.

    banderas = banderas | 0x01;

    v = v & 0xfd;PTBD = PTBD ^ 0x01;

    PTBD_PTBD0 = ~PTBD_PTBD0;

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    23/56

    Desplazamientos. Ejemplos.

    PTBD = PTBD > 4; ( ROR c, ROR c, ROR c,ROR c )

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    24/56

    Manejo de bits como variables

    Es vlida aplicar una asignacin a un bit. Son vlidas las operaciones lgicas

    entre bits |, & y ^.

    Ejemplos: Freescale:

    PTAD_PTAD4 = 1; PIC:

    PORTBbits.RB4 = 0;

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    25/56

    Constantes.

    Se permiten constantes numricas y

    alfanumricas.Ej:

    #define TOTO 4#define LED PTBD_PTBD0

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    26/56

    CICLOS YCOMPARACIONES

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    27/56

    Acciones bsicas.

    Secuencias. Repeticiones. Selecciones.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    28/56

    Repeticiones. For.

    Permite repetir sentencias hasta que se

    cumpla una condicin.Ej:

    for(i = 0; i < 10; i++){PTBD_PTBD0 = ~PTBD_PTBD0;

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    29/56

    Uso del for

    for( i = 0; i < 10; i++)

    Condicin dearranque

    Condicin deejecucin

    ( MIENTRASQUE )

    Condicin de

    incremento

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    30/56

    Ejemplo de for

    for(i = 0; i < 10; i++){

    PTAD_PTAD0 = 1;}

    9Se cumple8

    ---Se cumple10

    10Se cumple9

    8Se cumple7

    7Se cumple6

    6Se cumple55Se cumple4

    4Se cumple3

    3Se cumple2

    2Se cumple1

    1Se cumple0

    Prximo valor de iCondicin i < 10Valor de i

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    31/56

    Expresiones relacionales y lgicas.

    Menor o igual=

    Distinto!=

    Igual==

    Menor

    OperacinOperador

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    32/56

    Expresiones relacionales y lgicas. Ejemplos.

    a>7

    b=320y0)&&(i

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    33/56

    Repeticiones. While.

    El for se presta para repetir cdigo n veces.

    El while es apropiado para repetir cdigomientras se cumpla una condicin.Ej:

    while(PTAD_PTAD0 == 1)

    {PTBD_PTBD0 = 1;

    }

    PTBD_PTBD0 = 0;

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    34/56

    Demoras. Cdigo en C.

    Con sentencias en C es difcil determinar

    el tiempo de demora.Ej:

    for(i = 0; i < 100000; i++){}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    35/56

    Demoras. Cdigo en assembler.

    Usa la directiva asm. Puede determinarse el tiempo de la demora.Ej:

    void main(void){unsigned char contador_1;

    asm{

    LDA #$FASTA contador_1;

    dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1

    }}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    36/56

    Demoras. Cdigo en C y assembler.

    Usa un ncleo bsico en assembler. Un for multiplica esa demora.Ej:

    void main(void)

    {unsigned char contador_1;unsigned char contador_2;

    for(contador_2 = 0; contador_2 < 10; contador_2++){

    asm

    { LDA #$FASTA contador_1;

    dem_1s_1:NOPNOPNOP

    DBNZ contador_1,dem_1s_1}}

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    37/56

    Selecciones. If.

    Permite ejecutar cdigo si se cumple una condicin.

    if(condicin_1)

    { grupo de sentencias 1}else if(condicin_2){

    grupo de sentencias 2}else if(condicin_3){

    grupo de sentencias 3}else{

    grupo de sentencias 4}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    38/56

    Selecciones. If. Ejemplo.

    if(numero == 0){

    PTBD = 0x3f;}else if(numero == 1){

    PTBD = 0x06;}else if(numero == 2){

    PTBD = 0x5b;

    }else.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    39/56

    FUNCIONES

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    40/56

    Funciones.

    Una funcin es una subrutina.

    Una funcin debe ser declarada. Una funcin debe ser definida.

    Una funcin puede ser invocada.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    41/56

    Funciones. Declaracin.

    Damos a conocer al compilador su existencia. Las declaraciones suelen hacerse antes de la

    funcin main.Ej:

    void demora(void);

    void main(void){

    }

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    42/56

    Funciones. Definicin.

    Es el cdigo de la funcin.

    Ej:

    void demora(void){unsigned char contador_1;

    asm{

    LDA #$FASTA contador_1;

    dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1

    }}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    43/56

    Funciones. Invocacin.

    Es la llamada a la subrutina o funcin.

    No hace falta de una instruccin comoCALL o JSR.Ej:

    void main(void){

    demora();}

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    44/56

    Accesibilidad de variables.

    Cada funcin tiene un rea de datos.

    Las variables de una funcin sealmacenan en su rea de datos.

    Las funciones no pueden acceder a lasreas de datos de otras funciones.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    45/56

    Accesibilidad de variables. Ejemplo.

    void main(void){

    unsigned char a;unsigned char contador_1;

    demora();}

    void demora(void){

    unsigned char contador_1;

    asm{

    LDA #$FASTA contador_1;

    dem_1s_1:NOPNOPNOPDBNZ contador_1,dem_1s_1

    }}

    rea datos

    main

    rea datos

    demora

    a

    contador_1

    contador_1

    PILA oSTACK

    C f

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    46/56

    Comunicacin entre funciones

    funcin func_a funcin func_b

    char charint intfloat

    float

    char, int, float

    char, int, float

    P j d

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    47/56

    Pasaje de parmetros

    Al igual que en un computadora, la pila se

    utiliza para el pasaje de parmetros:

    int funcion(char a, int b, float c,.)

    Ejemplo de pasaje de parmetros

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    48/56

    Ejemplo de pasaje de parmetros

    usando la pilavoid 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;}

    main sum

    donga ( 5 )

    dunga ( 3 ) s1 ( 3 )

    s2 ( 5 )

    ( 8 )dunga ( 8 )

    restadunga ( 8 )

    dunga ( 5 )

    r1 ( 8 )

    r2 ( 5 )

    ( 3 )donga ( 3 )

    P j d t

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    49/56

    Pasaje de parmetros.

    Permiten comunicar variables de una funcin a otra.

    Ej:void demora(unsigned char t)

    { unsigned char c, contador_1;

    for(c = 0; c < t; c++){

    asm{

    LDA #$FASTA contador_1;dem_1s_1:

    NOPNOPNOPDBNZ contador_1,dem_1s_1

    }}

    }

    P j d t I i

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    50/56

    Pasaje de parmetros. Invocacin.

    Ej:

    void main(void){

    demora(10);demora(5);}

    D l i d l

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    51/56

    Devolucin de valores.

    Permite que una funcin devuelva un resultado. Se devuelve un valor con la sentencia return.

    Ej:unsigned BCD_a_bin(unsigned char a, unsignedchar b, unsigned char c){

    unsigned char auxiliar;

    auxiliar = a * 100 + b * 10 + c;

    return auxiliar;}

    De ol cin de alores In ocacin

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    52/56

    Devolucin de valores. Invocacin.

    Ej:

    void main(void){unsigned char a, x;

    a = 1;

    x = BCD_a_bin(5, 4, a);}

    Uso del heap

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    53/56

    Uso del heap

    Se hace declarando variables estticas

    externas, mas conocidas comoVARIABLES GLOBALES.

    Ejemplo de pasaje de parmetros

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    54/56

    j p p j p

    usando el heapint dunga, donga;

    void main(void){

    dunga = 3;donga = 5;suma();resta();

    }

    int suma(void){

    dunga = dunga + donga;}

    int resta(void)

    { dunga = dunga - donga;}

    heap main

    suma

    resta

    dunga

    donga

    Pasaje de parmetros usando el

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    55/56

    j p

    heapVentajas:

    Pueden anidarse losllamados a funcionessin que crezca la pila

    enormemente.

    Desventajas:

    La memoria usadaen el heap no puedeliberarse.

  • 7/25/2019 SASE2011-Lenguaje_C.pdf

    56/56

    CHAU!