Forum: Compiler & IDEs Frage zu einer Klammer


von Pierre G. (bqube)


Lesenswert?

Narbend,

Ich bearbeite das A/D Tutoriell und verstehe eine bestimmte Zeile nicht 
richtig oder sehe den Sinn darin nicht richtig.

Bei dem Code Stück
1
/* ADC Einzelmessung */
2
uint16_t ADC_Read( uint8_t channel )
3
{
4
  // Kanal waehlen, ohne andere Bits zu beeinflußen
5
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
6
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
7
  while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung warten
8
  }
9
  return ADCW;                    // ADC auslesen und zurückgeben
10
}

Gibt es diese Zeile
1
uint16_t ADC_Read( uint8_t channel )

Heißt es, das die Variable ADC_Read eine Größe von unit16_t hat und 
in ihr der Wert der Variable channel mit einer Größe von unit8_t 
steckt ?

Oder versteh ich das ganze falsch?

Mfg Bqube

von Digi S. (digispark)


Lesenswert?

Pierre Gnauck schrieb:

> Oder versteh ich das ganze falsch?


Ja :-)


uint16_t ADC_Read( uint8_t channel )

definiert eine Funktion names ADC_Read, an die beim Aufruf ein Parameter 
namens channel übergeben werden muss. Der Datentyp dieses Paramters ist 
uint8_t. Als Rückgabewert liefert diese Funktion einen uint16_t Wert.

von Pierre G. (bqube)


Lesenswert?

Ahhhh :) das macht es nun auch ein wenig logischer für mich also wenn 
ich mir den ganzen Code nun anschaue (Verkürzt)

1
/* ADC initialisieren */
2
void ADC_Init(void) {
3
 
4
  uint16_t result;
5
 
6
  // die Versorgungsspannung AVcc als Refernz wählen:
7
  ADMUX = (1<<REFS0);    
8
  // oder interne Referenzspannung als Referenz für den ADC wählen:
9
  // ADMUX = (1<<REFS1) | (1<<REFS0);
10
....
11
....
12
...
13
..
14
 
15
 
16
/* ADC Einzelmessung */
17
uint16_t ADC_Read( uint8_t channel )
18
{
19
  // Kanal waehlen, ohne andere Bits zu beeinflußen
20
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
21
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
22
  while (ADCSRA & (1<<ADSC) ) {   // auf Abschluss der Konvertierung warten
23
  }
24
  return ADCW;                    // ADC auslesen und zurückgeben
25
}
26
27
....
28
....
29
.
30
.....
31
.

Ist der Untere Code eine Funktion in der Funktion void ADC_Init(void)

Mfg Bqube

Danke Digi Spark

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Pierre Gnauck schrieb:
> Ist der Untere Code eine Funktion in der Funktion void ADC_Init(void)

Nein, nicht in der Funktion. Dir ist da eine schließende geschweifte 
Klammer abhanden gekommen, nämlich die, die ADC_Init() beendet.

C kennt keine Funktionen in Funktionen.

von Pierre G. (bqube)


Lesenswert?

Jaja :) der Umstieg von ASM auf GCC wird noch ein wenig dauern

Mfg Bqube

von Yalu X. (yalu) (Moderator)


Lesenswert?

Pierre Gnauck schrieb:
> Ich bearbeite das A/D Tutoriell und verstehe eine bestimmte Zeile nicht
> richtig oder sehe den Sinn darin nicht richtig.

Am Anfang des AVR-GCC-Tutorials (über das du vermutlich zum Artikel 
"Analoge Ein- und Ausgabe" gelangt bist)steht geschrieben:

"Vorausgesetzt werden Grundkenntnisse der Programmiersprache C."

Diese fehlen dir komplett.

Kauf die ein Lehrbuch über C (z. B. das von Kernighan & Ritchie) oder 
arbeite ein C-Tutorial im Web durch. Hier findest du es ein paar Links 
dazu:

https://www.mikrocontroller.net/articles/C

C zu lernen ist nicht allzu schwer, aber ganz ohne Literatur ist es 
definitiv nicht zu schaffen.

von DirkB (Gast)


Lesenswert?

Ein Buch über C wäre da sehr sinnvoll.

Mein Vorschlag: "Programmieren in C" von Brian W. Kernighan, Dennis M. 
Ritchie
wenn du damit klar kommst, auch das Original: "The C Programming 
Language"

von Pierre G. (bqube)


Angehängte Dateien:

Lesenswert?

Soweit bin ich auch schon hatte mir das hier gekauft ....... aber konnte 
es nicht abwarten schon ein wenig mit GCC zu probieren :)

Mfg Bqube

von Karl H. (kbuchegg)


Lesenswert?

Schnapp dir einen PC, installier dir eine freie ENtwicklungsumgebung für 
C und arbeite das Buch bis zum ersten Drittel durch. Widersteh der 
Versuchung die beigelegten Beispiele einfach nur laufen zu lassen und zu 
sagen "na toll", sondern studier sie und dann programmier sie selber. 
Wandle die Beispiele ab, wenn im Buch Übungsaufgaben sind, dann mach 
die.

Im Endeffekt sind das ein paar Wochen lernen, die sich ganz schnell 
selbst bezahlt machen.

Und dann bist du soweit, auf einen µC zu wechseln und dich mit den 
Besonderheiten der µC Programmierung vertraut zu machen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.