Bitte kurz um Hilfe bei struct.verstehe es nicht!

Gast #1955462
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
// ======================================
Gast #1955500
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
Gast #1955519
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.
Gast #1955520
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
Gast #1955521
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.
Gast #1955531
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

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