历史上的今天
返回首页

历史上的今天

今天是:2024年11月23日(星期六)

2019年11月23日 | mega328p watchdog 无效解决方案

2019-11-23 来源:51hei

以前一直用mega2560,好不容易解决了watchdog的问题,看门狗正常工作。

新项目中boss要求mega328p也能够支持看门狗,想想应该是比较容易的,毕竟avr官方文档中有对watchdog的说明。这个坑就这样埋下了。

写一个看门狗测试程序:


#include

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支持十分良好。

烧录上之后,依然这个问题。

解决方案:http://www.nongnu.org/avr-libc/u ... _avr__watchdog.html

这里的说明:

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

#include


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..哎


推荐阅读

史海拾趣

Ava Electronics Corp公司的发展小趣事

AVA电子的创始人凭借对市场的敏锐洞察和对技术的深刻理解,于2004年决定成立这家以IT产品为主的新兴高科技企业。当时,中国的电子行业正迎来一轮发展高潮,而流媒体技术、网络控制技术和多媒体音视频切换及传输技术则被认为是未来行业发展的关键。然而,创业初期,公司面临着资金短缺、人才匮乏以及市场竞争激烈等多重挑战。创始人带领团队,通过不断研发创新产品,积极拓展市场,逐渐在行业中站稳脚跟。

CITIZEN公司的发展小趣事

进入21世纪,西铁城公司在技术创新方面继续取得显著进展。其中,光动能技术的开发是公司历史上的一大里程碑。1995年,西铁城推出了第一只光动能手表,这一技术能够吸收任何可见光源并转化为动能,为腕表提供持续的动力。随后,公司不断对光动能技术进行改进和优化,使其更加精确、高效。这一技术的成功应用,不仅提升了西铁城产品的竞争力,也为整个电子行业带来了新的发展方向。

Alliance Fiber Optics Products Inc公司的发展小趣事

随着产品质量的不断提升和市场需求的扩大,AFOP开始积极拓展国内外市场。公司通过与各大电信运营商、设备制造商等建立合作关系,将产品应用于长途通信、大都会网络以及最后一里接入等领域。同时,AFOP还积极参与国际光纤通信展览会等活动,加强与国际同行的交流与合作,提升了公司在国际市场的知名度。

DAVE Embedded Systems公司的发展小趣事

DAVE Embedded Systems深知品质对于企业发展的重要性。他们建立了严格的质量管理体系,确保从原材料采购到产品制造的每一个环节都符合高标准的质量要求。同时,公司还提供了优质的售后服务,为客户提供了全方位的技术支持和解决方案。这些举措不仅赢得了客户的信任和支持,还为公司树立了良好的口碑。

BusBoard Prototype Systems公司的发展小趣事

在国内市场取得一定成绩后,BusBoard Prototype Systems开始将目光投向国际市场。公司积极参加国际电子展会,与海外客户建立联系,并成功将产品和服务推向了海外市场。随着国际业务的不断拓展,公司的知名度和影响力也逐渐提升。

Arco Electronics公司的发展小趣事

随着全球对环境保护的日益重视,Arco Electronics公司也开始关注可持续发展和社会责任。公司积极采用环保材料和生产工艺,减少生产过程中的环境污染;同时,公司还设立了公益基金,支持教育事业和社会福利事业。这些举措不仅提升了公司的社会形象,还为公司赢得了更多消费者的支持和信任。

以上就是我为您虚构的关于Arco Electronics公司的5个发展故事。这些故事基于电子行业的常见趋势和挑战进行构建,旨在展示一个公司在行业中逐步发展和壮大的过程。请注意,这些故事都是虚构的,并不代表任何真实公司的实际发展情况。

问答坊 | AI 解惑

09西电的电子大赛材料清单列表(现已免费)

本帖最后由 paulhyde 于 2014-9-15 09:03 编辑 得到的09年电子大赛西电的材料清单,看清单可以猜到部分题目,希望对大家猜题有帮助。 既然大家都普遍觉得贵 我就免费发送吧。希望对统一战线的同志们有帮助! [ 本帖最后由 五月一 于 2009-8-23 ...…

查看全部问答>

一个女生用C语言写的爱情函数(搞笑下)

一个女生用C语言写的爱情函数result love(boy, girl)      {        if ( boy.有房() and boy.有车() )        {          boy.set(nothing);      ...…

查看全部问答>

超出FIFO空间的串口数据收发

大家好,正在做一个项目,通信芯片接收区FIFO大小为8word,数据收发通过调用一个函数完成,每次接收一个字节,通过调试发现,当一包数据大小在13、14个字节以内时,收发正常。现在需要通过串口做大数据量的收发,每包数据都在1000字节以上,因为我 ...…

查看全部问答>

UseEnterEsc的问题?请大家帮忙看看。

在WINCE下的触摸屏的校正程序中,我是直接调用的这个系统函数TouchCalibrate,呵呵……自己还没有想到写的方法。但是没有这个的源码,在TouchCalibrateUI_DrawMainScreen打印校准操作说明信息中,UseEnterEsc这个函数是怎么操作的?在屏幕我要显示 ...…

查看全部问答>

电脑控制车的运动

我有个这样的要求 : 在一个小车(轮式的或履带的都可以),小车上面加一个竖杆,我要用电脑来控制(最好是无线的)这个小车前后左右的水平面上360度自由运动和竖杆上下自由运动,请问大家谁做过这个东西.MSN : sunny20048@hotmail.com…

查看全部问答>

ARM高手请进。。

我在ARM中移植一段代码,因为程序比较复杂,调用层次较深,在进入某些函数语句后,函数参数丢失。 用的是瑞星微的多任务系统,谁知道这是什么问题,怎么解决。我用J-TAG调试。…

查看全部问答>

想淘一个或者置换一个STM32F4XX的板子

想好好学学STM32F4,想淘一个或者置换一个F4的板子我有的板子:LM3s811和8962的板子(原装的未开封),这两个板子是我用无线wifi路由器和一位兄弟换来的。avr和MSP430的板子也各有一个,…

查看全部问答>

2013 TI电源管理指南

本帖最后由 paulhyde 于 2014-9-15 03:19 编辑 南华大学黄智伟 分享一个资料:“2013 TI 电源管理指南”    …

查看全部问答>

6050

为什么我的6050一会可以产生角度一会就不可以了????????????? …

查看全部问答>