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

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 adcConfigcomo variable global: unsigned int adcConfig.

¿Cómo puedo imprimir el adcConfigvalor. Debido a que esta es una voidfunción, no devuelve ningún valor.

He intentado así:

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

¿Está mal? O cómo puedo imprimir adcConfigel valor.

El controlador es ATMega32A , compilador CodeVisionAVR .

@stevenvh Estoy usando el controlador ATmega32-A y el compilador CodeVisionAVR.
¿Tiene alguna comunicación con una PC o VDU ​​para mostrar el valor?
@Dean, sí, estoy imprimiendo valores usando la comunicación Usart (PuTTy).

Respuestas (1)

Si necesita que la función devuelva un valor, no se puede declarar nula. 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 usó un retVal local, mientras dejaba presente la variable adcConfig, lo que puede haber sido confuso. Puede pasar adcConfig directamente ya que es el tipo correcto. Sin embargo, si desea que la función sea independiente de adcConfig, use el retVal local en lugar de adcConfig; esto probablemente sea mejor que usar una variable global)

Entonces puedes hacer:

printf("configreg:%d", ReadAdcConfigReg());
No podrá devolver un valor de 16 bits como un archivo unsigned char.
@DaveTweed: cierto, pensé que era un valor de 8 bits mirando solo el primer spi(0xFF)valor :-) Lo modificaré ahora.