Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Timer Arduino由于计时器崩溃_Timer_Arduino_Counter_Interruption_Arduino Due - Fatal编程技术网

Timer Arduino由于计时器崩溃

Timer Arduino由于计时器崩溃,timer,arduino,counter,interruption,arduino-due,Timer,Arduino,Counter,Interruption,Arduino Due,我试图使用库到期计时器读取速度为10KHz的模拟输入(A0),但是,当我增加向量值时,它会崩溃,目标是在具有5000大小向量的FFT分析中使用向量。我曾尝试直接使用SAM3X83定时器,但我遇到了同样的问题。这个故事让我快疯了 请,我将感谢任何帮助。Thx #include <DueTimer.h> int v[5000]; void setup(){ Serial.begin(9600); Timer3.attachInterrupt(Read); Time

我试图使用库到期计时器读取速度为10KHz的模拟输入(A0),但是,当我增加向量值时,它会崩溃,目标是在具有5000大小向量的FFT分析中使用向量。我曾尝试直接使用SAM3X83定时器,但我遇到了同样的问题。这个故事让我快疯了

请,我将感谢任何帮助。Thx

#include <DueTimer.h>

int v[5000];

void setup(){ 

  Serial.begin(9600);

  Timer3.attachInterrupt(Read);

  Timer3.start(100); 

  analogReadResolution(12);

}

void loop(){}

void display(){  

  for(int j=0; j<5000; j++){ 

  Serial.println(v[j]); 

  }

}

int i=0;

void Read(){ 

  v[i]=analogRead(A0);

  i++;

  if (i>=5000){

    i=0;

    Timer3.stop();     

    }
}
#包括
INTV[5000];
无效设置(){
Serial.begin(9600);
定时器3.连接中断(读取);
定时器3.启动(100);
分辨率(12);
}
void loop(){}
void display(){
对于(int j=0;j=5000){
i=0;
Timer3.stop();
}
}

如果使用DutTimer,则必须使用易失性变量

volatile是一个被称为变量限定符的关键字,它通常在变量的数据类型之前使用,用于修改编译器和后续程序处理变量的方式


声明变量volatile是编译器的一个指令。编译器是将C/C++代码转换为机器代码的软件,机器代码是Arduino中Atmega芯片的真正指令

如果使用DutTimer,则必须使用可变变量

volatile是一个被称为变量限定符的关键字,它通常在变量的数据类型之前使用,用于修改编译器和后续程序处理变量的方式


声明变量volatile是编译器的一个指令。编译器是将C/C++代码转换为机器代码的软件,机器代码是Arduino中Atmega芯片的真正指令

这段代码中的“向量值”是什么?你的代码在哪里崩溃?嗨,收到你的答案后我无法入睡,所以我再次开始编码,我解决了它。虽然我忘记了将调用添加到display函数,但它不起作用,因为它在循环“loop”之外,这就是我所做的,并且工作得非常完美:int I=0;void Read(){v[i]=analogRead(A0);state=!state;digitalWrite(led,state);i++;if(i>5000){Timer3.stop();i=0;flag=1;}}}我必须从循环中调用显示函数,这是它工作的唯一方式,led引脚用于测量频率,并使用usb数据分析仪确保频率正确此代码中的“向量值”是什么?您的代码在哪里崩溃?嗨,收到您的答案后我无法入睡,所以我再次开始编码,我解决了问题。虽然我忘记了将调用添加到display函数,但它不起作用,因为它在循环“loop”之外,这就是我所做的,并且工作得非常完美:int I=0;void Read(){v[i]=analogRead(A0);state=!state;digitalWrite(led,state);i++;if(i>5000){Timer3.stop();i=0;flag=1;}}}我必须从循环中调用显示函数,这是它工作的唯一方式,led引脚用于测量频率,并使用usb数据分析仪确保频率正确