Forum: Mikrocontroller und Digitale Elektronik Problem mit Struct und Strings


von LightCo (Gast)


Lesenswert?

Hallo zusammen,
habe folgendes Problem, für welches ich keine Lösung finde:

Ich möchte eine Struktur mit Werten und Strings füllen, diese soll dann 
im internen Flash abgespeichert werden.

typedef struct {
    REAL     Value;
    INT8U    Description[128];
    INT8U    StatusFlags;
    }Input;

Input     input_flash[10];

input_flash[0].Value = a_inputs[0].Value;

input_flash[0].Description = a_inputs[0].Description;

Die Übergabe von dem REAL Wert value klappt.
Nur bei der Übergabe des Textes in Description gibt folgende 
Fehlermeldung:
  incompatible types in assignment

die Übergabe ans Flash klappt auch.
Danke für eure Hilfe

von Simon K. (simon) Benutzerseite


Lesenswert?

Du musst den String kopieren (memcpy, memcpy_P). Genau Syntax ist 
abhängig vom C-Compiler, Ziel-Mikrocontroller

von Ulrich M. (Firma: ---) (ulrich1267)


Lesenswert?

Hallo LightCo,

Strings lassen sich in C nicht so einfach mit = kopieren. So kannst Du 
höchstens den Zeiger auf den String kopieren. Oder möchtest Du das? Habe 
ich das missverstanden?

Ulrich

von Karl H. (kbuchegg)


Lesenswert?

LightCo wrote:

> Nur bei der Übergabe des Textes in Description gibt folgende
> Fehlermeldung:
>   incompatible types in assignment

C hat keinen eigenen String Datentyp. Als Ersatz muss ein
Array herhalten.
Aber: mit Arrays als Ganzes kann man praktisch keine
Operationen durchführen. Noch nicht mal Zuweisen oder
Vergleichen. Alles muss über Schleifen auf die einzelnen
Arrayelemente runtergebrochen werden.

Aber: Da man das häufig braucht, bringt jeder C Compiler
eine Sammlung von Funktionen zur Stringverarbeitung mit
http://www.mikrocontroller.net/articles/FAQ#Wie_funktioniert_String-Verarbeitung_in_C.3F

und beim gcc gibt es dann noch spezielle Funktionen, die benutzt
werden, wenn der String im Flash und nicht im SRAM steht.
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Vereinfachung_f.C3.BCr_Zeichenketten_.28Strings.29_im_Flash

von LightCo (Gast)


Lesenswert?

Ja Danke für eure Hilfen. Hat mir jetzt erstmal weitergeholfen.

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.