Problem mit dem Rückgabewert der Druckfunktion

Ich bin neu in der Programmierung. Ich habe kleine Zweifel, ich weiß, das ist eine einfache Frage, aber ich bin verwirrt. Ich habe folgende Funktion:

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;    
}

Ich habe adcConfigals globale Variable deklariert: unsigned int adcConfig.

Wie kann ich den adcConfigWert drucken. Da dies eine voidFunktion ist, gibt sie keinen Wert zurück.

Ich habe es so versucht:

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

Ist es falsch? Oder wie kann ich adcConfigWert drucken.

Controller ist ATMega32A , Compiler CodeVisionAVR .

@stevenvh Ich verwende den ATmega32-A-Controller und den CodeVisionAVR-Compiler.
Haben Sie eine Verbindung zu einem PC oder VDU, um den Wert anzuzeigen?
@Dean ja, ich drucke Werte mit usart communication (PuTTy).

Antworten (1)

Wenn die Funktion einen Wert zurückgeben muss, kann sie nicht für ungültig erklärt werden. So wie Sie es jetzt haben, müssen Sie zuerst die Funktion aufrufen und dann die globale Variable an die printf-Funktion übergeben. Also, was Sie tun, sollte funktionieren.

Um die Funktion mit einem Rückgabewert zu verwenden, gehen Sie wie folgt vor:

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;    
}

(Hinweis: Die vorherige Bearbeitung verwendete ein lokales retVal, während die adcConfig-Variable vorhanden blieb, was möglicherweise verwirrend war. Sie können adcConfig direkt übergeben, da es sich um den richtigen Typ handelt. Wenn Sie jedoch möchten, dass die Funktion unabhängig von adcConfig ist, verwenden Sie die lokales retVal anstelle von adcConfig - das ist wahrscheinlich besser als die Verwendung einer globalen Variablen)

Dann können Sie Folgendes tun:

printf("configreg:%d", ReadAdcConfigReg());
Sie können einen 16-Bit-Wert nicht als unsigned char.
@DaveTweed - stimmt, ich dachte, es wäre ein 8-Bit-Wert, der nur den ersten Wert betrachtet spi(0xFF):-) Werde ihn jetzt ändern.