2 votos

El tipo largo del compilador de Microchip del XC8 no sube el valor de 32bits

Necesito un número grande en mi firmware, así que elegí long para el trabajo. En los documentos de microchip el tipo largo proporciona 4Bytes para su uso: enter image description here

Así que he creado esta variable (timeCounter): enter image description here

En una interrupción de 100us del timer2 esta variable se incrementa: enter image description here

Problema: La variable es unsigned long pero cuando trazo su valor el valor máximo alcanzado es aproximadamente 32725! y la variable es SIGNED!!!! imagen: enter image description here

El código siguiente muestra un sizeof(unsigned long) igual a 4bytes... enter image description here enter image description here

Ya he desactivado las optimizaciones del compilador. Utilizando el PIC18f26k80.

\=========================================================

código:

#include "main.h"

void main( void ){

char string[100];
unsigned long timeCounter;

setupHw();
initHw();
initSw();

while( true ){

    clearWDT();   

    /*============================================================================*\
     * Task3 (60s)
     * Processo...
     * Dependências:                  
    \* ===========================================================================*/
    if( f60s ){
        f60s = false;

        sprintf(string, "TimeCounter (60s): %d\n", timeCounter);
        txStringUart1(string);
       } // end da task2       
    }
}

7 votos

Utilice texto cuando extraiga el código y la salida de la consola, no capturas de pantalla.

1 votos

hacer no poner el código y la salida de texto en las imágenes . Por favor, edita el post y copia y pega el texto aquí

0 votos

-1 por los comentarios anteriores: por favor, elimine las imágenes del texto y reemplace con el texto real, y el downvote será revertido.

22voto

Dan Auclair Puntos 3063

El problema no está en su tipo, sino en la forma de imprimirlo. En C %d El especificador de formato es para int no para long . Para los firmantes long debe utilizar %ld si su compilador lo soporta. Para los sin signo utilice %lu .

1 votos

Por favor, especifique también que para evitar muchos problemas es mejor utilizar la biblioteca int estándar de c99, con su propio formateador que deja muy claro con cuántos bits está trabajando.

1 votos

@Rique Es una característica estándar de C. Si el compilador es compatible con el estándar lo tendrá. Deberías consultar la documentación y/o simplemente probarlo.

0 votos

@Rique Bienvenido a EE.SE. Es una práctica habitual en este sitio no aceptar inmediatamente una respuesta, aunque sea correcta, para estimular el debate y dar una oportunidad a las respuestas alternativas. Como ya has aceptado una respuesta, la bonificación de reputación desaparece y la continuación de la discusión ya no tiene mucho incentivo (el premio ha desaparecido). 24 horas es un tiempo de espera razonable. Usted es libre de votar o rechazar la respuesta como considere oportuno, sin restricciones de tiempo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X