problema con el valor de retorno de la función de impresión

1

Soy nuevo en la programación. Tengo una pequeña duda, sé que esta es una pregunta simple pero estoy confundido. Tengo la siguiente función:

void ReadAdConfReg(void)
{              
    SPCR = 0x5D;
    ADC_CS = 0;      
    while (MISO_PIN != 0) ;
    spi(0x50);
    adcConfig = spi(0xFF);    
    adcConfig = (adcConfig << 8) | spi(0xFF);  
    ADC_CS = 1;    
}

He declarado adcConfig como variable global: unsigned int adcConfig .

¿Cómo puedo imprimir el valor adcConfig ? Debido a que esta es una función void , no devuelve ningún valor.

Lo he intentado así:

ReadAdConfReg();
printf("configreg:%d",adcConfig);

¿Está mal? O cómo puedo imprimir el valor de adcConfig .

El controlador es ATMega32A , compilador CodeVisionAVR .

    
pregunta verendra

1 respuesta

0

Si necesita la función para devolver un valor, no se puede declarar nulo. Como lo tiene ahora, primero debe llamar a la función, luego pasar la variable global a la función printf. Así que lo que estás haciendo debería funcionar.

Para usar la función con un valor de retorno, haga algo como esto:

unsigned int ReadAdConfReg(void)
{        
    unsigned int retVal;
    SPCR = 0x5D;
    ADC_CS = 0;      
    while (MISO_PIN != 0) ;
    spi(0x50);
    adcConfig = spi(0xFF);    
    adcConfig = (adcConfig << 8) | spi(0xFF);  
    ADC_CS = 1;
    return acdConfig;    
}

(nota: la edición anterior utilizó una evaluación local, dejando la variable adcConfig presente, lo que puede haber sido confuso. Puede pasar adcConfig directamente, ya que es del tipo correcto. Si desea que la función sea independiente de adcConfig , use el retVal local en lugar de adcConfig (probablemente sea mejor que usar una variable global)

Entonces puedes hacer:

printf("configreg:%d", ReadAdcConfigReg());
    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas