打印

看门狗问题

[复制链接]
928|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xsgy123|  楼主 | 2012-8-11 20:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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-8-11 21:05 | 只看该作者
如果那一句就是使能中断的话,并不影响看门狗的运行,仅仅是无人喂狗而已。因为你的喂狗服务是定时器中断中做的。
还有一种方法,就是分析你的初始化例程中各段代码的运行时间,在需要的地方插入喂狗的硬代码。
实际上,如果你的初始化例程没有 Bug,也不受外部不确定因素的影响的话,就不必要用看门狗监视。否则除了反复地复位,也没有任何好处。

使用特权

评论回复
板凳
baidudz| | 2012-8-11 21:17 | 只看该作者
int()不过是一系列初始化函数的集合。
你可以先
关狗
初始化好时钟后,初始化狗。
开狗。
其它的硬件初始化过程中,分别手动喂狗

使用特权

评论回复
地板
pkat| | 2012-8-11 21:22 | 只看该作者
LS的方法可行,LZ可以试试

使用特权

评论回复
5
shenmu2012| | 2012-8-15 15:37 | 只看该作者
整一个timerA定时器,在定时器中喂狗,操作肯门狗的比较的好啊

使用特权

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

本版积分规则

229

主题

2603

帖子

1

粉丝