nur spezielle Teile von Funktionen nutzen und mehrere Variablen zurück geben

Gast #2321393
Lesenswert?

Hallo, ich programmiere zwar einen Controller, aber es ist eigentlich 
ein reine reine C Frage. Ich möchte gern eine Funktion schreiben, die 
mal den ersten ADC, mal zweiten ADC und mal beide ausließt, außerdem 
möchte ich mehr als einen Wert zurück geben. Ich könnte jetzt in der 
Funktion mit case arbeiten, das Frisst dann Zeit. Kann man sowas wie 
Präprozessorbefehle einfügen, wenn vor dem Funktionsaufruf schon klar 
ist, dass gewisse Teile nicht genutzt werden? Und was wäre die beste 
Variante mehrere Variablen zurück zu geben? Ein Einquetschen (codieren) 
in eine andere Variable, Globale Variablen, Pointer oder gibt es 
vielleicht bessere Varianten?

Gruß Mark
#2321452
Lesenswert?

Naja, mehrere Werte gibt man in C beispielsweise über ein lokales Array 
zurück bei dem man auf Elemente nach dem letzten Element zugreift. Damit 
erreichst Du die Rücksprungadresse, sowie die lokalen Variablen der 
aufrufenden Adresse.

Und Du muss in C natürlich nicht an den Anfang einer Funktion springen, 
sondern kannst, beispielsweise mit Hilfe von Funktionszeigern auch an 
andere Adressen innerhalb der Funktion springen.

Denk einfach daran, dass C nur ein komplexer Macro-Assembler ist.
Gast #2321508
Lesenswert?

Christian Berger schrieb:
> Naja, mehrere Werte gibt man in C beispielsweise über ein lokales Array
> zurück bei dem man auf Elemente nach dem letzten Element zugreift. Damit
> erreichst Du die Rücksprungadresse, sowie die lokalen Variablen der
> aufrufenden Adresse.
>
> Und Du muss in C natürlich nicht an den Anfang einer Funktion springen,
> sondern kannst, beispielsweise mit Hilfe von Funktionszeigern auch an
> andere Adressen innerhalb der Funktion springen.
>
> Denk einfach daran, dass C nur ein komplexer Macro-Assembler ist.

Alda! :D Haste nen Clown gefrüstückt?
#2321512
Lesenswert?

> Ich möchte gern eine Funktion schreiben, die
> mal den ersten ADC, mal zweiten ADC und mal beide
> ausließt,

abhängig wovon?

Ich würde 2 Funktionen machen:
eine die einen ADC ausliesst
und eine zweite Funktion, die mit Hilfe der ersten Funktion 2 ADC 
ausliest.
1
uint16_t readADC( uint8_t channel )
2
{
3
  ....
4
}
5

6
void readBothADC( uint16_t* value1, uint16_t* value2 )
7
{
8
  *value1 = readADC( 0 );
9
  *value2 = readADC( 1 );
10
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren