mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bitte kurz um Hilfe bei struct.verstehe es nicht!


Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann mir jemand sagen, was an meinem struct falsch ist? Ich bekomme in 
jeder Zeile, wo ich auf ein Element des structs zugreife einen Fehler 
mit der Meldung "Error[Pe077]: this declaration has no storage class or 
type specifier" oder "Error[Pe154]: expression must have struct or union 
type"

#define MAX_BUFFER_LENGTH 50

struct
{
  uint8_t by_send_buffer[MAX_BUFFER_LENGTH];
  uint8_t by_send_bytecnt;
  uint8_t by_number_send_bytes;
  uint8_t by_required_preambles;
  uint8_t by_preamble_counter;
  uint8_t by_send_SM;
} HART_comm_send;


// ============== TEST ==================
HART_comm_send.buffer[0] = 0x12;
HART_comm_send.by_send_buffer[1] = 0x23;
HART_comm_send.by_send_buffer[2] = 0x34;
HART_comm_send.by_send_buffer[3] = 0x45;
HART_comm_send.by_send_buffer[4] = 0x56;
HART_comm_send.by_send_buffer[5] = 0x67;
HART_comm_send.by_send_buffer[6] = 0x78;
HART_comm_send.by_send_buffer[7] = 0x89;
HART_comm_send.by_number_send_bytes = 8;
HART_comm_send.by_required_preambles = 10;
// ======================================

Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, das erste eld im TEST ist nur jetzt grad falsch, weil ich es 
umbenannt hatte, um zu gucken, ob es dann geht - tuts aber nicht...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast das struct definiert, musst aber noch eine Variable vom 
entsprechenden Typ anlegen:
HART_comm_send HART_comm_send_var;

Ralf

Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich vorher auch nicht und da gehts...

Autor: Fritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf schrieb:
> HART_comm_send HART_comm_send_var;

Geht auch nicht!

Autor: Zylix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Dieta!

Im Internet gibt es zahlreiche Tuts zum Thema C. Aber um Dir trotzdem zu 
helfen:
typedef struct MY_STRUCT         // Hier die Definition
{
    uint8_t send_buffer[10];
    uint8_t send_blabla;
} MY_STRUCT_NOW;                  // Hier definiere ich eine Variable vom Typ MY_STRUCT

...

MY_STRUCT_NOW.send_buffer[0] = 0x10;
MY_STRUCT MYS
MYS.send_buffer[0] = 0xAA;

So einfach ist das. Viel Spaß weiterhin...


mfg zylix

Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee...................auch nicht!

Hier: oben steht auch nicht mehr viel drüber:
#include "msp430x24x.h"
#include <stdint.h>

#define MAX_BUFFER_LENGTH 10


typedef struct HART_IO
{
  uint8_t by_send_buffer[10];
  uint8_t by_send_bytecnt;
  uint8_t by_number_send_bytes;
  uint8_t by_preambles;
  uint8_t by_send_SM;
} HART_comm_send;


#define SEND_SM_IDLE     1
#define SEND_SM_PREAMBLE 2
#define SEND_SM_DATA     3
#define SEND_SM_DONE     4

// ============== TEST ==================
HART_comm_send.by_send_buffer[0]     = 0x12;
HART_comm_send.by_send_buffer[1]     = 0x23;
HART_comm_send.by_send_buffer[2]     = 0x34;
HART_comm_send.by_send_buffer[3]     = 0x45;
HART_comm_send.by_send_buffer[4]     = 0x56;
HART_comm_send.by_send_buffer[5]     = 0x67;
HART_comm_send.by_send_buffer[6]     = 0x78;
HART_comm_send.by_send_buffer[7]     = 0x89;
HART_comm_send.by_number_send_bytes  = 8;
HART_comm_send.by_required_preambles = 10;
// ======================================

Ein anderes struct geht genau nach dem Schema ohne typedef usw.

Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier das andere struct:
struct
{
  uint8_t by_state;                        // State machine state
  uint8_t by_count;                        // Counter for characters
  uint8_t by_master;                       // Primary / secondary master
  uint8_t by_PAcount;                      // Counter for preambles
  uint8_t by_error;                        // Error
  uint8_t by_command;                      // Command
} HART_COM_SM = {SM_IDLE, 0, PRIM_MASTER, 5, NO_ERROR, 0};

Das macht keine Probleme

Autor: Andreas B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf schrieb:
> Du hast das struct definiert, musst aber noch eine Variable vom
> entsprechenden Typ anlegen:

Nein, Dieta hat eine Struktur ohne Namen definiert und die Variable 
HART_comm_send angelegt. Das hat alles seine Korrektheit.

Anhand der Fehlermeldungen vermute ich mal, dass die Zuweisungen 
wirklich so wie zitiert direkt auf der obersten Ebene unter der Struktur 
stehen und nicht innerhalb einer Funktion. Das geht natürlich nicht.

Autor: Dieta (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andreas B. schrieb:
> Anhand der Fehlermeldungen vermute ich mal, dass die Zuweisungen
> wirklich so wie zitiert direkt auf der obersten Ebene unter der Struktur
> stehen und nicht innerhalb einer Funktion. Das geht natürlich nicht.

Oh man!!!

Sorry, dass ich euch damit belästigt habe...natürlich geht das nicht!

Danke, jetzt in der main geht's natürlich! *schäm

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.