【问题标题】:Arduino Due Timer crashArduino到期定时器崩溃
【发布时间】:2015-11-14 15:45:14
【问题描述】:

我正在尝试使用库 Due Timer 读取速度为 10KHz 的模拟输入 (A0),但是,当我增加它崩溃的向量的值时,目标是在 FFT 分析中使用该向量带有 5000 大小的向量。我曾尝试直接使用 SAM3X83 定时器,但我遇到了同样的问题。这个问题快把我逼疯了!!

请提供任何帮助。谢谢。

#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();     

    }
}

【问题讨论】:

  • 这段代码中的“向量的值”是什么?
  • 你的代码在哪里崩溃?
  • 您好,收到您的回答后我睡不着,所以我又开始编码,我解决了。虽然我忘记添加对显示函数的调用,但它没有工作,因为它是循环“循环”,这就是我所做的并且完美地工作:
  • int i=0;无效读取(){ v[i]=analogRead(A0);状态=!状态;数字写入(领导,状态);我++; if (i>5000){ Timer3.stop();我=0;标志 = 1; } }
  • 我不得不从循环循环中调用显示函数,这是它工作的唯一方式,LED 引脚用于测量频率并使用 USB 数据分析仪确保频率正确

标签: timer arduino counter interruption arduino-due


【解决方案1】:

如果你使用 DutTimer,你必须使用 volatile 变量

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

声明变量 volatile 是对编译器的指令。编译器是将您的 C/C++ 代码翻译成机器代码的软件,机器代码是 Arduino 中 Atmega 芯片的真实指令。 Link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多