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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.