Forum: Mikrocontroller und Digitale Elektronik Mittelwert bilden


von Peter (Gast)


Lesenswert?

Hi Leute!

Ich möchte den Mittelwert eines EKG-Signals bilden (N=30):

Ich habe die Funktion folgendermaßen implementiert:
1
signed long  mov_int(signed long *data)
2
{
3
  signed long y=0,i=0;
4
  
5
  for(i=0;i>=29;i++)
6
  {
7
    y += data[i];
8
  }  
9
  y = y/30;
10
11
  USART_Transmit_4Bytes(y);
12
13
  return y;
14
}

Ich bekomme immer nur 0 als Wert zurück obwohl die Eingangswerte nicht 0 
sind.
Zur Überprüfung der Eingangswerte habe ich die Funktion so geändert und 
mir immer den aktuellsten Wert von data anzeigen lassen. Da erhalte ich 
immer die richtigen Werte.
1
signed long  mov_int(signed long *data, unsigned char n)
2
{
3
  signed long y=0,i=0;
4
5
  USART_Transmit_4Bytes(data[n]);
6
  
7
  for(i=0;i>=29;i++)
8
  {
9
    y += data[i];
10
  }  
11
  y = y/30;
12
  
13
  return y;
14
}

Dann habe ich die Funktion noch so abgeändert dass sie mir jeweils die 
Werte von y in der for-schleife ausgegeben werden.
1
signed long  mov_int(signed long *data, unsigned char n)
2
{
3
  signed long y=0,i=0;
4
5
  for(i=0;i>=29;i++)
6
  {
7
    y += data[i];
8
    USART_Transmit_4Bytes(y);
9
  }  
10
11
  y = y/30;
12
  
13
  return y;
14
}
Hier bekomme ich gar keine Werte ausgegeben. Hat jemand eine Idee woran 
das liegen könnte?

von Hunt W. (hunt_work_er)


Lesenswert?

Peter schrieb:
>   for(i=0;i>=29;i++)
>   {
>     y += data[i];
>   }

wie oft wird das wohl durchlaufen?

von M. B. (Firma: TH Nürnberg) (ohmen)


Lesenswert?

Schleifenbedingung richtig?

von Peter (Gast)


Lesenswert?

Yep alles klar, danke!!! :-)

von Thosch (Gast)


Lesenswert?

Peter schrieb:
> Hier bekomme ich gar keine Werte ausgegeben. Hat jemand eine Idee woran
> das liegen könnte?

Weil die Schleife niemals durchlaufen wird!

Nur mal so als Tip, der zweite Parameter einer for-Anweisung
ist kein Abbruchkriterium.

von Karl H. (kbuchegg)


Lesenswert?

Nur mal so als weiterer Tip:

Wenn man in C, obwohl es erlaubt ist, nicht alles 'auf Knirsch' 
schreibt,
1
  for(i=0;i>=29;i++)

 sondern sich ein paar Leerzeichen reinmacht
1
  for (i = 0; i >= 29; i++)
dann 'sieht' man auch viel mehr. Schliesslich sind wir alle seit 
Kindesbeinen an darauf trainiert worden, dass zwischen Wörtern in 
geschriebener Sprache ein Leerraum steht. Das so trainierte Gehirn tut 
sich viel leichter den Sinn einer Buchstabensuppe zu erfassen, als wenn 
es aus dem Zusammenhang heraus erst mal die einzelnen "Wörter" 
identifizieren muss.

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.