久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4850|回復: 1
打印 上一主題 下一主題
收起左側

mega328p watchdog 無效解決方案

[復制鏈接]
跳轉到指定樓層
樓主
ID:72519 發表于 2015-1-22 23:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以前一直用mega2560,好不容易解決了watchdog的問題,看門狗正常工作。
新項目中boss要求mega328p也能夠支持看門狗,想想應該是比較容易的,畢竟avr官方文檔中有對watchdog的說明。這個坑就這樣埋下了。
寫一個看門狗測試程序:

#include <avr/wdt.h>
const int ledPin =  13;      // the number of the LED pin

void setup() {
  wdt_disable();
  Serial.begin(9600);
  Serial.println("System Init OK!");
  pinMode(ledPin, OUTPUT);
  Serial.println("Wait 5 Sec..");
  delay(5000);
  wdt_enable(WDTO_8S);
  /*
    WDTO_15MS
    WDTO_30MS
    WDTO_60MS
    WDTO_120MS
    WDTO_250MS
    WDTO_500MS
    WDTO_1S
    WDTO_2S
    WDTO_4S
    WDTO_8S
  */
  Serial.println("Watchdog enabled!");
}


uint8_t timer = 0;
void loop() {


  if (!(millis() % 1000)) {
    Serial.print(millis());
    Serial.print("--");
    timer++;
    Serial.println(timer);
    digitalWrite(ledPin, digitalRead(ledPin) == 1 ? 0 : 1); delay(1);
  }
  //  wdt_reset();
}
第一次運轉正常,成功復位,小case,隨便就搞定了。However.....

復位之后居然就一直復位了...一直無限循環復位,像下面這樣....
System Init OK!
Wait 5 Sec..
Watchdog enabled!
5000--1
6000--2
7000--3
8000--4
9000--5
10000--6
11000--7
12000--8
13000--9
System Init OK!

我去,這怎么回事。猜測可能是bootloader的問題,搞個optiboot來看看,聽說對watchdog支持十分良好。
燒錄上之后,依然這個問題。
這里的說明:
Note that for newer devices (ATmega88 and newer, effectively any AVR that has the option to also generate interrupts), the watchdog timer remains active even after a system reset (except a power-on condition), using the fastest prescaler value (approximately 15 ms). It is therefore required to turn off the watchdog early during program startup, the datasheet recommends a sequence like the following:
對于atmega88以及新型號的單片機(自帶產生中斷的),看門狗可能會在系統復位之后,依然運行(除掉電復位外)。因此,需要在程序啟動早期,關閉看門狗。datasheet中推薦插入一段這樣的程序:

#include <stdint.h>
#include <avr/wdt.h>

uint8_t mcusr_mirror __attribute__ ((section (".noinit")));

void get_mcusr(void) \
__attribute__((naked)) \
__attribute__((section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}
然后,問題解決,正常復位.. 還是的多看datasheet..哎
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:76658 發表于 2015-4-11 11:15 | 只看該作者
能把最終代碼上傳下么
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美精品乱码久久久久久按摩 | av手机免费在线观看 | 国产精品久久国产精品 | 狠狠干网站 | 午夜精品久久久 | 亚洲国产一区二区三区在线观看 | 拍真实国产伦偷精品 | 精品无码久久久久久国产 | 国产91在线播放 | 免费人成在线观看网站 | 亚洲国产成人精品久久久国产成人一区 | 亚洲国产精品久久 | 午夜激情小视频 | 91久久国产综合久久 | 日韩中文视频 | 免费一级毛片 | 国产精品美女久久久久aⅴ国产馆 | 国产在线看片 | 国产大学生情侣呻吟视频 | 成人在线免费观看 | 欧美午夜在线 | 毛片黄片免费看 | 精品久久久久久久久久久久久久 | 蜜桃精品噜噜噜成人av | 久久精品欧美一区二区三区不卡 | 在线观看中文字幕亚洲 | 国产精品久久久久aaaa九色 | 免费看国产精品视频 | 一本色道精品久久一区二区三区 | 成人国产在线观看 | 成人免费看片 | 欧美精品片 | 成人毛片一区二区三区 | 黑人精品欧美一区二区蜜桃 | 国产成人精品一区二三区在线观看 | av天天操 | 成人片免费看 | 欧美日韩在线视频观看 | 国产精品视频久久久 | 精品婷婷 | 精品国产乱码久久久久久果冻传媒 |