0

私のコードはうまく機能していて、この関数呼び出しを追加するまでシリアルモニターに出力を提供し、シリアルへの送信を停止します!!

この関数は、結果の配列に入力配列の絶対値を入力します。

#define INPUT_SIZE 800

void vabs(double *vec,int vsize,double *result){
  int i;
  for(i=0 ; i<vsize ; ++i)
    result[i] = fabs(vec[i]);
}

double x1[INPUT_SIZE];
int x1size;
double absX1[INPUT_SIZE];
int absX1size;

double Process(int *inputArray,double *qrs){
  int i;

  // Initialization
  for(i=0 ; i<INPUT_SIZE ; ++i)
    x1[i] = (double)inputArray[i];

  x1size = INPUT_SIZE;
  // Cancellation DC drift and normalization
  double meanValue = mean(x1,x1size);
  minus(x1,x1size,meanValue);

  Serial.println(x1[0]);

//  vabs(x1,x1size,absX1);  // Uncomment this line will cause the problem!
  absX1size = x1size;
  *qrs = 5;
  return 10;
}

セットアップとループ:

void setup(){
  Serial.begin(9600);
  delay(1000);
}

void loop(){
  // This array contains 800 values
  int bArr[]= {59,259,259,250,250,250,83,83,...};
  double qrs = 0;
  double heartRate = Process(bArr,&qrs);
  delay(5000);
}

フラッシュメモリ128KBとSRAM8KBのArduinoMega(Atmega1280)を使用しています。

4

1 に答える 1

0

fabs()tryの代わりに(result[i] < 0 ? vec[i] * -1 : vec[i])、に問題があるかどうかが表示されますfabs()

ちなみに、ここには不要なコードがたくさんあるようです。ここに投稿するために他の部分を削除したからだと思います。

于 2013-01-22T22:00:41.773 に答える