C variablen in dateien aufteilen

Gast #1048997
Lesenswert?

hi zusammen

ich schreib gerade nen kleines c prog auf dem msp430 in CCE 3. Dabeui 
habe ich folgendes Problem:

ich habe mir 2 structs gebaut die wie folgt aussehen (stehen in spi.h)
1
struct spi_raw_data
2
{
3
  unsigned int data0;
4
  unsigned int data1;
5
  unsigned int data2;
6
};
7

8
struct spi
9
{
10
  struct spi_raw_data RX;
11
  struct spi_raw_data TX;
12
};

in der dazugehörigen main.c mach ich mir nen feld von den structs:
1
struct spi data_field[10];
2
static struct spi_raw_data tx_test[] = 
3
{
4
  {0xF00F, 0x5050, 0xC0F3},
5
  {0xCF03, 0x5555, 0x0550},
6
  {0xF00F, 0x5050, 0xC0F3}
7
};
in der main.h habe ich noch folgendes stehen:
1
extern struct spi data_field[10];

so das geht, jetzt hab ich mir ne funktion gebaut (in spi.c), die 
tx_test nach data_field.TX kopieren soll
1
void copy_data(struct spi_raw_data* tx)
2
{
3
  char loop = 0;
4
  
5
  used_data = sizeof(tx);
6
  
7
  for(loop = 0; loop <= used_data; loop++)
8
  {
9
    data_field[loop].TX = tx[loop];
10
  }
11
  return;
12
}

so und nun krachts...... CCE sagt mir folgendes:
expression must be a pointer to a complete object type spi spi_drv.c

ich versteh nur bahnhof...... was mach ich falsch?

Danke und Gruß
Marcel
#1049012
Lesenswert?

Anscheinend ist dem Compiler der genaue Aufbau der Struktur zu diesem
Zeitpunkt nicht bekannt. Du hast vermutlich vergessen spi.h dort
einzubinden.

Aber auch wenn ihm die Struktur dann bekannt ist, wird es nicht
funktionieren, denn ...
1
used_data = sizeof(tx);
.. used_data enthält hier nur die Größe eines Pointers, nicht die Größe
der Struktur, und schon gar nicht die Anzahl der Array-Elemente.
Gast #1049061
Lesenswert?

hi stefan

also du hattest recht gehabt ... hatte das include vergessen!

das mit dem sizeof stimmt auch... nur wie gehts? in main kann ich ja 
sizeof(data_field)/sizeof(struct spi) machen und bekomme dann das 
richtige zurück. aber in der fkt krieg ich nur die länge des ptr... muss 
ich die länge jetzt als parameter aufnehmen oder gehts auch anders?

gruß
Gast #1049077
Lesenswert?

ok

danke stefan! hab noch eine frage.... wenn ich die variable 
spi_data_field auch static machen (um paltz auf dem stack zu sparen) 
mussich diese auch als parameter übergeben oder gibts da nen anderen 
trick?

danke und gruß
Gast #1049195
Lesenswert?

hi

also ich dachte mir das so:
die variablen nicht ins ram zu schreiben sondern ins flash, da ich nicht 
besonders viel ram habe.
geht aber net so, weil wenn ich sie mit const ablege kann ich sie nur im 
sourcecode ändern, die frage ist ob es mgl. ist dies mit einem anderen 
befehl zu tun. static schreib ja leider auch ins ram und reserviert im 
gegensatz zu auto den bereich fest.

mfg

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