El compilador de microchips de XC8 no aumenta el valor de 32 bits

2

Necesito un número grande en mi firmware, así que elegí mucho para el trabajo. En los documentos del microchip, el tipo largo proporciona 4Bytes para uso:

Asíquecreéestavariable(timeCounter):

Enunainterrupciónde100usdetimer2estavariableseincrementa:

Problema:Lavariablenotienesigno,perocuandograficosuvalor,¡elvalormáximoalcanzadoesaproximadamente32725!ylavariableestaFIRMADA!!!!imagen:

Elsiguientecódigomuestrauntamañode(sinsignolargo)iguala4bytes...

Yahedeshabilitadolasoptimizacionesdelcompilador.UtilizandoPIC18f26k80.

=========================================================

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       
    }
}
    
pregunta Rique

1 respuesta

22

El problema no es con su tipo, sino con la forma en que lo imprime. Cía El especificador de formato %d es para int , no para long . Para long firmado, debe usar %ld en su lugar, si su compilador lo admite. Para uso sin firmar %lu .

    
respondido por el Eugene Sh.

Lea otras preguntas en las etiquetas