极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10030|回复: 4

请教,为何这段代码运行指定时间后就死机了。

[复制链接]
发表于 2013-11-26 00:47:24 | 显示全部楼层 |阅读模式
#include <FlexiTimer2.h>

void dust()
{

   Serial.print("AAA");
  }

  void setup()
{
  Serial.begin(9600);  
FlexiTimer2::set(5000 , dust); // 5000ms period
  FlexiTimer2::start();  }


void loop(){

    Serial.println("BBB");

}

请教,以上代码,为何在运行后,5秒时间,就没反应了。串口监视器也不再出数据了,要reset下,又能坚持5s;改这个:FlexiTimer2::set(X , dust);那就只能坚持x秒,之后串口就不出数据,死机。
   这个定时函数介绍:http://playground.arduino.cc/Main/FlexiTimer2
说没隔多少秒,调用一次dust函数,为什么会死机呢?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-11-26 08:04:58 | 显示全部楼层
本帖最后由 szpapas 于 2013-11-26 08:06 编辑

#include <FlexiTimer2.h>

void dust()
{
   Serial.println("AAA");
}

void setup()
{
  Serial.begin(9600);  
  //FlexiTimer2::set(500 , 1.0/1000, dust); // 5000ms period
  FlexiTimer2::set(5000 ,  dust); // 5000ms period
  FlexiTimer2::start();  
}


void loop(){
  Serial.println("BBB");
  delay(1000);
}


缺少delay(1000), 这样就把Timer 逼死了。

运行结果:
BBB
BBB
BBB
BBB
BBB
AAA
BBB
BBB
BBB
BBB
BBB
AAA
BBB
BBB
BBB
BBB
BBB

回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-26 14:15:48 | 显示全部楼层
加了delay(1000), 只是死机时间延长些,可以验证下,否则第一次就死了,delay(1000), 能坚持久点,后一两分钟死。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-26 14:21:34 | 显示全部楼层
总是运行时间不长,一段时间后就死机了。感觉中断会跟串口冲突,引起串口通信失败。又中断的函数就不能用串口吗?那怎么输出数据啊
回复 支持 反对

使用道具 举报

发表于 2013-11-27 18:41:47 | 显示全部楼层
#include <MsTimer2.h>

void dust()
{

    Serial.print("AAA");
   }

   void setup()
{
   Serial.begin(9600);  
MsTimer2::set(5000 , dust); // 5000ms period
   MsTimer2::start();  }


void loop(){

     Serial.println("BBB");
     delay(1000);

}

我用这个库就能运行
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 20:09 , Processed in 0.038094 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表