struct Problem

Gast #3223409
Lesenswert?

Ja etwas code bereitet mir und meine GCC bauchweh
1
 struct DCF77Maschine {
2
   uint8_t Status;
3
   uint8_t dcfbits[59];
4
   uint8_t counter;
5
};
6
  
7
struct DCF77Maschine DCF77Data;
8
DCF77Data->Status = 1;

Fehlermeldung laut compiler
1
Error  1  expected '=', ',', ';', 'asm' or '__attribute__' before '->' token  C:\Users\Matthias\Desktop\AVR Progs\AVRc\GccApplication1\GccApplication1\GccApplication1.c  57  10  GccApplication1

Hab ich was verpasst so greift man doch auf Structs zu oder binge ich 
was durcheinander?

MFG Matthias
Gast #3223424
Lesenswert?

Was meinst du mit Anweisungen also es gibt ne main loop und isrs.
Und das geht auch alles wenn ich
es auskommentiere.
1
//DCF77Data.Status = 1;

und ob . oder -> ist wurst wirft den gleichen fehler warum sollte das 
auch den compiler jucken bedeutet ja das gleiche

MFG matze
#3223435
Lesenswert?

Matthias schrieb:

> und ob . oder -> ist wurst wirft den gleichen fehler

Dann hast du noch andere Fehler


> warum sollte das
> auch den compiler jucken bedeutet ja das gleiche

keineswegs.
Oder hast du irgendwo einen Pointer im Spiel?


Das hier
1
struct DCF77Maschine DCF77Data;
ist ein schon ein Struktur-Objekt. Und als solches hat es Member, auf 
die zugegriffen werden kann
1
void foo()
2
{
3
  DCF77Data.Status = 1;
4
}
Moderator #3223439
Lesenswert?

Matthias schrieb:
> Was meinst du mit Anweisungen also es gibt ne main loop und isrs.

Die Anweisung
1
  DCF77Data.Status = 1;

Und die sollte innerhalb irgendeiner Funktion stehen und nicht 
außerhalb, wie es in deinem Code-Ausschnitt der Fall ist.

> und ob . oder -> ist wurst wirft den gleichen fehler warum sollte das
> auch den compiler jucken bedeutet ja das gleiche

Nein, . und -> sind überhaupt nicht das Gleiche. Es sieht so aus, als ob 
du dein C-Buch ein zweites Mal durchlesen solltest ;-)
Gast #3223455
Lesenswert?

In der tat inerhalb der main rennt ist :)

Du ich habs wärend dem info studium aufgegeben bücher zu lesen wenn man 
jedes semester ne neue sprache einführt

Und der unterschied zwischen . und -> ist mir schon klar aber ich meine 
ansich ist ja das DCF77DATA auch ne adresse bzw Pointer kein wert im 
speicher.
Oder irre ich mich da?


MFG Matze
Gast #3223474
Lesenswert?

Der operator->() führt in ANSI-C eine Dereferenzierung durch, der 
Punkt-Operator greift auf Kompositionen direkt zu. Eine gültige 
äquivalente Zuweisung wäre:

&DCF77DATA->Status =1;

Schau dir mal Kernighan / Ritchie's Buch an - besser einmal in guter 
Literatur nachgelesen, als ne reine "geht/geht nicht" Antwort. Das 
dauert zwar länger, hält dafür aber auch länger nach.
Gast #3223503
Lesenswert?

1
uint8_t calc_min(volatile uint8_t start,volatile uint8_t stop,volatile struct DCF77Maschine* Data)
2
{
3
  uint8_t Puff = 0;
4
  uint8_t multi = 1;
5
  for(uint8_t c = start;c < stop;c++ )
6
  {
7
    Puff = Puff + (Data->dcfbits[c]*multi);
8
    multi = multi * 2;
9
    if (c == start + 3)
10
    {
11
      multi = 10;
12
    }
13
  }
14
  return Puff;
15
}

Der Unterschied ist mir schon klar :) wie man ja sieht.
Bloß Manchmal sind es halt die kleinichkeiten wie der fall das es nicht 
in der main war
Gast #3223505
Lesenswert?

Matthias schrieb:
> Du ich habs wärend dem info studium aufgegeben bücher zu lesen wenn man
> jedes semester ne neue sprache einführt
Das ist bei C nicht so geschickt, da das (wie du siehst) einige Fallen 
hat die auch anderer Sprachen mächtiger Programmierer verwirren 
können...

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