2016-10-26 8 views
-4

Für meine These verwende ich einen ATmega16, um mit MCP2515 über SPI zu kommunizieren. Wenn wir den Beispielcode überprüfen, um SPI als Slave-Modus im Atmega16-Datenblatt einzurichten, erhalten wir den nächsten Beispielcode.C Unterschied zwischen Char-Funktion (void) und Void-Funktion (void)

void SPI_SlaveInit(void) 
{ 
/* Set MISO output, all others input */ 
    DDR_SPI = (1<<DD_MISO); 
/* Enable SPI */ 
    SPCR = (1<<SPE); 
} 
char SPI_SlaveReceive(void) 
{ 
/* Wait for reception complete */ 
    while(!(SPSR & (1<<SPIF))) 
; 
/* Return data register */ 
    return SPDR; 
} 

Wir verstehen nicht, warum sie char SPI_SlaveReceive (void) statt nur Leere SPI_SlaveReceive (void) verwenden. Kann uns jemand erklären, warum sie den Char anstelle von Void verwenden? Was ist der Unterschied? Ich kann keine gute Erklärung im Internet finden.

+0

'SPI_SlaveReceive' gibt nichts zurück, also gibt es keinen Rückgabetyp außer' void'. Was ist das Problem in diesem –

+1

Char SPI_SlaveReceive (void) nimmt nichts, wenn sie aufgerufen wird, und gibt ein Zeichen zurück. void SPI_SlaveInit (void) nimmt nichts, gibt nichts zurück –

+4

Weil "sie" einen Wert zurückgeben wollen? – SingerOfTheFall

Antwort

1

SPI_SlaveReceive empfängt etwas, so gibt es das "etwas" als char zurück, daher der Rückgabetyp. Wenn es eingegeben wurde, um void zurückzugeben, würden Sie nicht in der Lage sein, den empfangenen Wert zu erhalten, der nicht sehr nützlich sein würde!

Wenn es nicht zurückgegeben, was es erhalten hat, wie würden Sie bekommen, was erhalten wurde ..?

Verwandte Themen