Forum: Mikrocontroller und Digitale Elektronik Arduino - Struktur initialisieren klappt nicht


von Bolle (Gast)


Lesenswert?

Hi ihr!

Ich habe eine Struktur definiert, um die globalen Variablen etwas 
aufzuräumen:

1
typedef struct {
2
  Servo servo;
3
  unsigned int   pin;
4
  unsigned int   angle_min;
5
  unsigned int   angle_max;
6
}t_servo;

Wenn ich jetzt einen Servo konkret anlegen will z.B.:
1
t_servo servo1 = {.pin=5, .angle_min=50, .angle_max=110};
Arduino: 1.8.5 (Windows 10), Board: "Arduino Nano, ATmega328P"
sorry, unimplemented: non-trivial designated initializers not supported

t_servo servo1 = {.pin=5, .angle_min=50, .angle_max=110};

                                                        ^

Tja und darum frage ich euch, was ich da falsch mache...eigentlich 
wollte ich nachher dann über weitermachen
1
static void ServoInit(t_servo* s) 
2
{
3
  s->servo.attach(s->pin);
4
  s->servo.write(s->angle_min);
5
};

von Der C-Lehrer (Gast)


Lesenswert?

Wie wäre es mit einem C Buch?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bolle schrieb:
> t_servo servo1 = {.pin=5, .angle_min=50, .angle_max=110};

Arduino nutzt C++, nicht C.

Und damit sollte
1
t_servo servo1 = 
2
{
3
  pin : 5, 
4
  angle_min : 50, 
5
  angle_max : 110
6
};

bessere Resultate liefern.

von Peter (Gast)


Lesenswert?

Autor: Der C-Lehrer (Gast)
>Wie wäre es mit einem C Buch?

Das Reservoir an Klugscheißern auf dieser Welt scheint mir unendlich zu 
sein ;-)

von Bolle (Gast)


Lesenswert?

Vielen Dank!

auch wenn der C-Lehrer sich jetzt (hoffentlich) selber dämlich vorkommt: 
postet doch einfach nicht, wenn ihr nichts zu sagen habt. Das würde den 
Signal-Rauschabstand im Forum wirklich verbessern. Nicht jeder der eine 
Arduino Frage hat ist doch zwingend ein Idiot...

c++ kann ich leider nicht, anscheinend sollte ich mich aber damit 
beschäftigen, wenn ich etwas mit Arduino spielen möchte.
Ich habe das System letzte Woche entdeckt und es gefällt mir sehr gut, 
weil man so gut damit spielen kann. Die zeitintensiven Dinge wie 
low-Level Treiber für Sensoren etc. ja breit verfügbar und Zeit ist ja 
in der Freizeit immer zu wenig.

von Oliver S. (oliverso)


Lesenswert?

Bolle schrieb:
> c++ kann ich leider nicht, anscheinend sollte ich mich aber damit
> beschäftigen, wenn ich etwas mit Arduino spielen möchte.

Was dann wieder zu Antwort 1 zurückbringt. Die benötigte 
Transferleistung solltest du auch noch hinbekommen.

Oliver

von Bolle (Gast)


Lesenswert?

Klar; Nur auf welche Beiträge trifft das nicht zu. In meinen Augen ist 
ein Forum wie das hier genau für solche Fragen wie die, die ich stellte 
da. Hier ist doch kein Marktplatz der Nobelpreisträger.

Was wäre denn deinem Anspruch gerecht geworden? In welchem Foren fühlst 
du dich wohl? Vielleicht lohnt es da mal rein zu gucken.
Ich bitte ernsthaft um Antwort!

von Jan K. (jan_k)


Lesenswert?

Etwas Signal im Rauschen (ergänzend zu Rufus):
Was du machen möchtest sind "Designated Initializers", siehe 
https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html. Die gibts in 
C++ aber nicht.

Und du brauchst auch kein typedef in C++ und könntest überlegen, einen 
Constructor für die struct (ja, das geht) zu erstellen, siehe z.B. 
https://stackoverflow.com/questions/10859213/what-is-the-c-equivalent-to-cs-designated-initializers

von chris (Gast)


Lesenswert?

Signal++;

Man kann theoretisch auch ein C- und H-File in der Ide mit "tabs" 
erzeugen und dann ins *.ino einbinden. Das kann man machen, wenn man die 
C-Files später sowieso auf andere Entwicklungssystem umziehen will.

von Kaj G. (Firma: RUB) (bloody)


Lesenswert?

Jan K. schrieb:
> Die gibts in C++ aber nicht.
Kommt aber vielleicht mit C++ 20.
https://en.wikipedia.org/wiki/C%2B%2B20#Possible_new_language_features

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.