极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15370|回复: 10

看门狗无法使用,怎么破?

[复制链接]
发表于 2014-12-9 18:23:52 | 显示全部楼层 |阅读模式
arduino nano和arduino pro mini 无法使用看门狗,无限复位,如果要使用看门狗,怎么破?
回复

使用道具 举报

发表于 2014-12-9 21:13:51 | 显示全部楼层
具体描述一下你的问题,这个功能是arduino 用的 avr上的功能,我觉得不太可能有问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-10 09:16:09 | 显示全部楼层
zoologist 发表于 2014-12-9 21:13
具体描述一下你的问题,这个功能是arduino 用的 avr上的功能,我觉得不太可能有问题

比如
#include <avr/wdt.h>  
  
const int ledPin =  13;      // 定义LED管脚  
   
  
void setup() {  
  //初始化LED为输出  
  pinMode(ledPin, OUTPUT);        
//初始化看门狗  

   wdt_enable(WDTO_1S);      
}  
  
void loop()  
{  
  //LED常亮  
  digitalWrite(ledPin, HIGH);   
  //喂狗,注释本句查看有没有重启  
   delay(2000);
  wdt_reset();   
}  
当去执行复位的时候,arduino 的L灯就一直在闪,无法复位,手动按复位键都没无法复位了,得断电才行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-12-13 14:44:28 | 显示全部楼层
神游天外 发表于 2014-12-10 15:01
真的真的真的真的真的

你解决这个现象了吗?
回复 支持 反对

使用道具 举报

发表于 2014-12-29 16:31:28 | 显示全部楼层
紫/aiq龙 发表于 2014-12-13 14:44
你解决这个现象了吗?

我也遇到了这个问题,不知道怎么解决。。。
回复 支持 反对

使用道具 举报

发表于 2015-1-4 15:56:28 | 显示全部楼层
你的看门狗设置成1s超时,但是程序里面喂狗是每个2s钟啊,喂不到,当然无限重启了,喂狗间隔设置到1s以内试试
回复 支持 反对

使用道具 举报

发表于 2015-1-4 19:56:48 | 显示全部楼层
xuanjj 发表于 2015-1-4 15:56
你的看门狗设置成1s超时,但是程序里面喂狗是每个2s钟啊,喂不到,当然无限重启了,喂狗间隔设置到1s以内试 ...

正确!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-8 11:55:06 | 显示全部楼层
xuanjj 发表于 2015-1-4 15:56
你的看门狗设置成1s超时,但是程序里面喂狗是每个2s钟啊,喂不到,当然无限重启了,喂狗间隔设置到1s以内试 ...

我设置成8s都是不行
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-1-8 11:56:25 | 显示全部楼层
terry—sun 发表于 2014-12-29 16:31
我也遇到了这个问题,不知道怎么解决。。。

没解决,只是用多了一块板子,直接当看门狗用了
回复 支持 反对

使用道具 举报

发表于 2015-1-31 22:22:36 | 显示全部楼层
试试这样用看门狗行不?

  1. #define Pin 4
  2. bool test = 0;

  3. void setup()
  4. {
  5.         pinMode(Pin,OUTPUT);
  6.         digitalWrite(Pin,test);

  7.         //设置、启动看门狗,
  8.         MCUSR &= ~(1<<WDRF);  //清除WDRF
  9.         WDTCR |= (1<<WDCE) | (1<<WDE);  //设置信号
  10.         WDTCR |= (1<<WDE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);  //设置WDP和启动看门狗WDE,必须在4个周期内完成,此处为2s的周期

  11.         for (byte i = 0; i <3; i++)
  12.         {
  13.                 digitalWrite(Pin,test = !test);
  14.                 delay(50);
  15.         }
  16. }

  17. void loop()
  18. {
  19.         //喂狗
  20.         __asm__ __volatile__ ("wdr");

  21.         digitalWrite(Pin,test = !test); delay(300);
  22.         
  23.         //关闭看门狗
  24.         // WDTCR |= (1<<WDCE) | (1<<WDE);  //设置信号
  25.         // WDTCR = 0x00;  //清除WDE位
  26. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-1-31 22:23:34 | 显示全部楼层
试试如上代码行不?
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 14:51 , Processed in 0.039254 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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