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


von Dieta (Gast)


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"

1
#define MAX_BUFFER_LENGTH 50
2
3
struct
4
{
5
  uint8_t by_send_buffer[MAX_BUFFER_LENGTH];
6
  uint8_t by_send_bytecnt;
7
  uint8_t by_number_send_bytes;
8
  uint8_t by_required_preambles;
9
  uint8_t by_preamble_counter;
10
  uint8_t by_send_SM;
11
} HART_comm_send;
12
13
14
// ============== TEST ==================
15
HART_comm_send.buffer[0] = 0x12;
16
HART_comm_send.by_send_buffer[1] = 0x23;
17
HART_comm_send.by_send_buffer[2] = 0x34;
18
HART_comm_send.by_send_buffer[3] = 0x45;
19
HART_comm_send.by_send_buffer[4] = 0x56;
20
HART_comm_send.by_send_buffer[5] = 0x67;
21
HART_comm_send.by_send_buffer[6] = 0x78;
22
HART_comm_send.by_send_buffer[7] = 0x89;
23
HART_comm_send.by_number_send_bytes = 8;
24
HART_comm_send.by_required_preambles = 10;
25
// ======================================

von Dieta (Gast)


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...

von Ralf (Gast)


Lesenswert?

Du hast das struct definiert, musst aber noch eine Variable vom 
entsprechenden Typ anlegen:
1
HART_comm_send HART_comm_send_var;

Ralf

von Dieta (Gast)


Lesenswert?

Hab ich vorher auch nicht und da gehts...

von Fritz (Gast)


Lesenswert?

Ralf schrieb:
> HART_comm_send HART_comm_send_var;

Geht auch nicht!

von Zylix (Gast)


Lesenswert?

Hallo Dieta!

Im Internet gibt es zahlreiche Tuts zum Thema C. Aber um Dir trotzdem zu 
helfen:
1
typedef struct MY_STRUCT         // Hier die Definition
2
{
3
    uint8_t send_buffer[10];
4
    uint8_t send_blabla;
5
} MY_STRUCT_NOW;                  // Hier definiere ich eine Variable vom Typ MY_STRUCT
6
7
...
8
9
MY_STRUCT_NOW.send_buffer[0] = 0x10;
10
MY_STRUCT MYS
11
MYS.send_buffer[0] = 0xAA;

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


mfg zylix

von Dieta (Gast)


Lesenswert?

Nee...................auch nicht!

Hier: oben steht auch nicht mehr viel drüber:
1
#include "msp430x24x.h"
2
#include <stdint.h>
3
4
#define MAX_BUFFER_LENGTH 10
5
6
7
typedef struct HART_IO
8
{
9
  uint8_t by_send_buffer[10];
10
  uint8_t by_send_bytecnt;
11
  uint8_t by_number_send_bytes;
12
  uint8_t by_preambles;
13
  uint8_t by_send_SM;
14
} HART_comm_send;
15
16
17
#define SEND_SM_IDLE     1
18
#define SEND_SM_PREAMBLE 2
19
#define SEND_SM_DATA     3
20
#define SEND_SM_DONE     4
21
22
// ============== TEST ==================
23
HART_comm_send.by_send_buffer[0]     = 0x12;
24
HART_comm_send.by_send_buffer[1]     = 0x23;
25
HART_comm_send.by_send_buffer[2]     = 0x34;
26
HART_comm_send.by_send_buffer[3]     = 0x45;
27
HART_comm_send.by_send_buffer[4]     = 0x56;
28
HART_comm_send.by_send_buffer[5]     = 0x67;
29
HART_comm_send.by_send_buffer[6]     = 0x78;
30
HART_comm_send.by_send_buffer[7]     = 0x89;
31
HART_comm_send.by_number_send_bytes  = 8;
32
HART_comm_send.by_required_preambles = 10;
33
// ======================================

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

von Dieta (Gast)


Lesenswert?

Hier das andere struct:
1
struct
2
{
3
  uint8_t by_state;                        // State machine state
4
  uint8_t by_count;                        // Counter for characters
5
  uint8_t by_master;                       // Primary / secondary master
6
  uint8_t by_PAcount;                      // Counter for preambles
7
  uint8_t by_error;                        // Error
8
  uint8_t by_command;                      // Command
9
} HART_COM_SM = {SM_IDLE, 0, PRIM_MASTER, 5, NO_ERROR, 0};

Das macht keine Probleme

von Andreas B. (Gast)


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.

von Dieta (Gast)


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

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.