Ayuda con sentencias en C

Colapsar
X
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar todos
nuevos mensajes

  • Ayuda con sentencias en C

    Estimados, estoy programando una placa que viene con solamente un interprete de C (es una placa de desarrollo electronica, no de pc o cosa por ele estilo) y no soy muy entendido en este lenguaje, apenas me las rebusco .
    el tema es que veo en una libreria que viene para las fuentes y otras que tiene un codigo como el siguiente :
    Código:
    USARTx->CR1 |= Cre1_set;
    
    o tambien por ejemplo :
    
    Inport1[10]= x>>8;
    
    x=OutReport[3]<<8|OutReport[2];
    y no tengo la menor idea de que es eso, busque bastante sobre esto pero no puedo encontrar nada que lo describa, incluso si pongo en busquedas comparadores, punteros, operadores todo lo que se me ocurrio no encontre que significa eso. Alguien puede decirme que hacen estos simbolos >>8 , | , -> ?
    Gracias!!

  • #2
    Re: Ayuda con sentencias en C

    Hola:

    USARTx es un puntero a un objeto instanciado tipo estructura de datos (struct) o a alguna clase;
    CR1 es un miembro público de esa estructura y para acceder a él se debe utilizar

    [Puntero_objeto_instanciado]-><miembro>

    En tu caso se trata de una asignación OR binario del contenido Cre1_set sobre CR1.


    Los operadores de bits << y >> se encargan de desplazar a derecha o izquierda los bits de una variable y el operador | realiza una comparación OR a nivel de bit, por lo tanto, la expresión:

    import[10] = x>>8;

    desplazaría el contenido de x 8 bits a la derecha y asigna el resultado al elemento 10 del array.

    x = outreport[3] << 8 | outreport[2]

    desplazaría 8 bits a la izquierda el valor de outreport[3] y efectuaría una comparación OR binaria de este resultado con el contenido de outreport[2], finalmente asigna a la variable x el valor obtenido.

    Para mejor comprensión:

    Supongamos que outreport[3] contiene un valor que representado en forma binaria sería.

    0110100101101011

    y outreport[2] contiene:

    0000111111100011

    Desplazamos outreport[3] 8 bits a la izquierda

    0110101100000000

    y ejecutamos el OR binario con el valor de outreport[2] con el resultado del desplazamiento.


    0110101100000000
    0000111111100011

    0110111111100011 -->RESULTADO QUE SE ASIGNA A X


    Para una mejor comprensión te recomiendo visitar los siguientes enlaces:

    Operador a nivel de bits - Wikipedia, la enciclopedia libre

    Anexo:Operadores de C y C++ - Wikipedia, la enciclopedia libre


    PD: Es importantísimo que en primer lugar estudies que tipo de datos maneja el microcontrolador o placa que te planteas programar. Cuando estás operando a nivel de bits debes conocer si las variables o lor puertos analógicos y digitales de la placa trabajan con 8, 16, 32 ....etcétera bits.
    Un cordial saludo
    -Acalanto-

    Madrid - España

    Leer detalladamente las normas del foro es una buena forma de comenzar a participar en él. Te llevará unos pocos minutos y el colectivo de usuarios te lo agradecerá. <si no las has leído sigue este enlace>

    Comentario


    • #3
      Re: Ayuda con sentencias en C

      Originalmente escrito por acalanto Ver mensaje
      Hola:

      USARTx es un puntero a un objeto instanciado tipo estructura de datos (struct) o a alguna clase;
      CR1 es un miembro público de esa estructura y para acceder a él se debe utilizar

      [Puntero_objeto_instanciado]-><miembro>

      En tu caso se trata de una asignación OR binario del contenido Cre1_set sobre CR1.


      Los operadores de bits << y >> se encargan de desplazar a derecha o izquierda los bits de una variable y el operador | realiza una comparación OR a nivel de bit, por lo tanto, la expresión:

      import[10] = x>>8;

      desplazaría el contenido de x 8 bits a la derecha y asigna el resultado al elemento 10 del array.

      x = outreport[3] << 8 | outreport[2]

      desplazaría 8 bits a la izquierda el valor de outreport[3] y efectuaría una comparación OR binaria de este resultado con el contenido de outreport[2], finalmente asigna a la variable x el valor obtenido.

      Para mejor comprensión:

      Supongamos que outreport[3] contiene un valor que representado en forma binaria sería.

      0110100101101011

      y outreport[2] contiene:

      0000111111100011

      Desplazamos outreport[3] 8 bits a la izquierda

      0110101100000000

      y ejecutamos el OR binario con el valor de outreport[2] con el resultado del desplazamiento.


      0110101100000000
      0000111111100011

      0110111111100011 -->RESULTADO QUE SE ASIGNA A X


      Para una mejor comprensión te recomiendo visitar los siguientes enlaces:

      Operador a nivel de bits - Wikipedia, la enciclopedia libre

      Anexo:Operadores de C y C++ - Wikipedia, la enciclopedia libre


      PD: Es importantísimo que en primer lugar estudies que tipo de datos maneja el microcontrolador o placa que te planteas programar. Cuando estás operando a nivel de bits debes conocer si las variables o lor puertos analógicos y digitales de la placa trabajan con 8, 16, 32 ....etcétera bits.
      Gracias Acalanto, ya lo resolvi ! No me llego el mail o no lo vi cuando respondiste esto , me resultaron muy utiles los links.

      Comentario


      • #4
        Re: Ayuda con sentencias en C

        Me alegro mucho.
        Un cordial saludo
        -Acalanto-

        Madrid - España

        Leer detalladamente las normas del foro es una buena forma de comenzar a participar en él. Te llevará unos pocos minutos y el colectivo de usuarios te lo agradecerá. <si no las has leído sigue este enlace>

        Comentario

        Trabajando...
        X