打印

看门狗问题

[复制链接]
1325|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yybj|  楼主 | 2012-11-28 23:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void init(void)
{
  clock_init();
  buzzer_pin_init();       //ºÜ³³£¬Ïȹصô
  lcd_pin_init();
  fram_pin_init();
  warn_light_pin_init();
  voice_pin_init();
  rotary_pin_init();
  keyboard_pin_init();
  
  ad_init();
  ctrl_pin_init();
  gprs_pin_init();
  

  timerA0_init() ;

  timerA1_init() ;                          
  
  timerB_init() ;
  
  rtos_init();
  lcd_dis_init();
  
  UART0_Init();
  UART1_Init();
  UART2_Init();
  UART3_Init();
  fram_init();
  RTCCTL01&=~RTCHOLD;                   // enable RTC interrupt
  //ADC12CTL0 |= ADC12SC;                 // Start sampling/conversion  
  __bis_SR_register(GIE);               //  enable interrupts
}


我在红字部分开的中断。我在定时器中喂狗(先不讨论这样喂合不合理的问题),我的意思是,
int main(void)
{         
  WDTCTL = WDTPW + WDTHOLD;              // Stop watchdog timer to prevent time out reset
  init();  
  TA1R = 0;
  
  WDTCTL=WDT_ARST_1000;   

  ……


因为int()比较长,为了不让看门狗在我初始化的过程中重启,我先关看门狗,然后初始化完之后再开,问题就来了,我在int()中死机,怎么办?


而如果我把   WDTCTL=WDT_ARST_1000;   放到int前面, int()超过1秒,又会造成重启,在int()中把定时器初始化靠前,定时器初始化完之后,就可以喂狗了,但是 开中断__bis_SR_register(GIE); 又是在int()最后。请问使能定时器后,没有这句:__bis_SR_register(GIE) 定时器工作了吗?  


我的喂狗如何放更好的看管整个程序过程?

相关帖子

沙发
火箭球迷| | 2012-11-28 23:23 | 只看该作者
硬件上解决干扰,还有就是你的软件也可以做相应干扰处理。

使用特权

评论回复
板凳
xsgy123| | 2012-11-28 23:27 | 只看该作者
如果那一句就是使能中断的话,并不影响看门狗的运行,仅仅是无人喂狗而已。因为你的喂狗服务是定时器中断中做的。

还有一种方法,就是分析你的初始化例程中各段代码的运行时间,在需要的地方插入喂狗的硬代码。

实际上,如果你的初始化例程没有 Bug,也不受外部不确定因素的影响的话,就不必要用看门狗监视。否则除了反复地复位,也没有任何好处。

使用特权

评论回复
地板
无冕之王| | 2012-11-29 23:53 | 只看该作者
LS的方法很好

使用特权

评论回复
5
smilingangel| | 2012-12-3 09:40 | 只看该作者
没有这句:__bis_SR_register(GIE) 定时器工作了吗?  

所有的中断都不能使用啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

175

主题

2496

帖子

1

粉丝