Forum: Mikrocontroller und Digitale Elektronik Frage zur C-Progrrammierung auf Mikrocontroller


von henryette lafayette (Gast)


Lesenswert?

Hallo,
ich schreibe ein C-Programm für einen Mikrocontroller und ich bitte euch 
um eure Hilfe bei einer kleinen Frage.
Ich möchte einer Funktion einen int-Wert übergeben, den die Funktion in 
ein 200 großes Array schreibt. Wennn ich die Funktion wieder aufrufe, 
soll die Funktion den nächsten Wert hinter den ersten Wert schreiben 
usw. Wenn das Array voll ist, verarbeitet die Funktion die Daten weiter. 
Bisher habe ich das scheinbar wenig elegant so gelöst, dass das array in 
der darüberliegenden Funktion angelegt wurden und der Funktion ein 
Pointer auf dieses Array übergeben wurde:
1
void funktion(int Wert, int* Array)
2
{
3
   /*Pseudocode:
4
   schreibe Wert in nächstes Feld des Arrays;
5
   if(Array voll)
6
      verarbeite Daten im Array;
7
   */
8
}
9
10
11
/*darüberliegende Funktion:*/
12
int array[200] = {0};
13
funktion(irgendeinwert, array);


Kann ich das auch irgendwie eleganter Lösen, dass ich das Array direkt 
in der Funktion anlege? Weil in der darüberliegenden brauche ich das 
Array eigentlich nicht.

Danke schonmal für eure Hilfe

von static (Gast)


Lesenswert?

ob es Sinn macht oder nicht, ..

[c]
void foo (int wert) {
  static int array[200];
  static unsigned char index = 0;

...

  if (index >= (sizeof (array) / 2))
    ; // Fehlerbehandlung
  else array[index++] = wert;

...
}
[c]

von henryette lafayette (Gast)


Lesenswert?

Ok danke, werde ich dann gleich mal probieren. Un du bist sicher, dass 
dann die Daten selbst statisch sind und nicht der Pointer darauf?

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

static schrieb:

>   if (index >= (sizeof (array) / 2))
wenn schon denn schon:
1
if (index >= (sizeof (array) / sizeof(array[0])))

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.