C símbolo idioma prioritario - (pit símbolo "+")

        Recientemente haciendo un voltaje de lectura de los datos en la EEPROM, y la función de los datos transmitidos al ordenador principal a través de mensajes CAN.

        Dado que el EEPROM se lee del tamaño de datos de una longitud byte de datos es de 8 bits, el tamaño de datos de voltaje es de 12 bits, y, después de los datos se ha de leer y luego reorganizar. Hay una serie de pilas 12, el valor de la tensión de lo que necesito para obtener el valor es 12, los datos se almacenan en la EEPROM 12 * 12/8 = 18 bytes. También conocido, los datos de EEPROM se almacena secuencialmente.

        Después de 18 bytes de datos leídos, por lo que mi hermano para realizar las siguientes operaciones:

        / * Los 18 bytes de datos EEPROM, 12 bytes se convierte en una tensión * /

         for (i = 0, j = 0; i <12; i ++)
        {
    if ((i% 2) == 0)
    {
voltage_value [i] = (EEPROM [j] << 4) + ((EEPROM [++ j] y 0xF0) >> 4);
    }
    Más
    {
voltage_value [i] = ((EEPROM [j] y 0x0F) << 8) + eeprom [++ j];
j ++;
    }

        }

            Adquirido el valor de voltaje del resultado no es exactamente lo que quiero. . . . . .

            Con el fin de entender Nota del editor, yo matriz EEPROM Oda al valor de re-exportación de los resultados:

            / * Asignación array Eeprom, resultados teóricos voltage_value son 0xFBD * /

            for (i = 0; i <6; i ++)
    {
eeprom [i * 3] = 0xFB;
eeprom [i * 3 + 1] = 0xDF;
eeprom [i * 3 + 2] = 0xBD;

    }

             / * Los 18 bytes de datos EEPROM, 12 bytes se convierte en una tensión * /

            for (i = 0, j = 0; i <12; i ++)
     {
    if ((i% 2) == 0)
    {
voltage_value [i] = (EEPROM [j] << 4) + ((EEPROM [++ j] y 0xF0) >> 4);
    }
    Más
    {
voltage_value [i] = ((EEPROM [j] y 0x0F) << 8) + eeprom [++ j];
j ++;
    }

       }

            / * Imprimir los resultados * /

     for (i = 0; i <12; i ++)
     {
     printf ( "% x \ t", voltage_value [i]);

    }

        

          Una mirada más atenta a los resultados de impresión, se encuentra el primer 0xdfd de datos, que ha estado fuera de la cuestión.

          这 一句 voltage_value [i] = (EEPROM [j] << 4) + ((EEPROM [++ j] y 0xF0) >> 4);

           La primera operación se lleva a cabo "++ j" operación, por lo que los resultados obtenidos son voltage_value [0] = (EEPROM [1] << 4) + ((EEPROM [1] y 0xF0) >> 4);

En lugar voltage_value [0] = (EEPROM [0] << 4) + ((EEPROM [1] y 0xF0) >> 4);

======================== línea divisoria precioso ===================== ================

          Código cambiarlo:

        for (i = 0, j = 0; i <12; i ++)
{
if ((i% 2) == 0)
{
voltage_value [i] = (EEPROM [j] << 4) + ((EEPROM [1+ j] y 0xF0) >> 4);
j ++;
}
Más
{
voltage_value [i] = ((EEPROM [j] y 0x0F) << 8) + eeprom [1 + j];
j + = 2;
}

}

        resultados de impresión normales

        

======================== línea divisoria precioso ===================== ================

        O escribir por separado:

        for (i = 0, j = 0; i <12; i ++)
{
if ((i% 2) == 0)
{
eeprom_value [i] = (EEPROM [j] << 4);
eeprom_value [i] + = ((EEPROM [++ j] y 0xF0) >> 4); } Más { eeprom_value [i] = ((EEPROM [j] y 0x0F) << 8); eeprom_value [i] + = eeprom [++ j]; j ++; }









}

        Además, no hay problema:

·        

        

        

Publicado cuatro artículos originales · ganado elogios 0 · Vistas 2678

Supongo que te gusta

Origin blog.csdn.net/wuyiwei999/article/details/80545506
Recomendado
Clasificación