请教,为何这段简单的print代码运行指定时间后就死机了-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3277|回复: 2

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

[复制链接]
发表于 2013-11-26 19:17 | 显示全部楼层 |阅读模式
本帖最后由 jinga 于 2013-11-26 19:22 编辑

#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函数,为什么会死机呢?

如果在loop最后一样加了delay(1000)(一段时间), 只是死机时间延长些,否则第一次就死了,delay(1000), 能坚持久点,一两分钟才死。总之运行时间不长,感觉是不是中断会跟串口冲突,引起串口通信失败,失败后就死机没输出了,中断的函数就不能用串口或是中断函数中不能print吗,必须在loop里输出print数据吗?那中断函数好像没这么的要求说明

FlexiTimer2.zip

3.83 KB, 下载次数: 3

发表于 2013-11-26 21:26 | 显示全部楼层
中断函数里最好不要有耗时的操作,要深入研究的话,需要你自己去看下avr中断相关的内容了
 楼主| 发表于 2013-11-26 21:44 | 显示全部楼层
这样啊,要是有了,是不是会导致不稳定,比如死机。Serial.print("AAA");这个打印函数,耗时约110us,跟读模拟口一次时间差不多,那么在中断中读模拟口,也算比较耗时的操作,这样限制就大了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2025-1-1 19:19 , Processed in 0.080274 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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