软件看门狗 softdog.c

发布者:温柔之风最新更新时间:2017-11-29 来源: eefocus关键字:软件看门狗  softdog.c 手机看文章 扫描二维码
随时随地手机看文章

汇编
ERRORP SEGMENT CODE
PUBLIC error
RSEG ERRORP
error:
CLR EA
MOV DPTR,#ERR1
PUSH DPL
PUSH DPH
RETI
ERR1:
CLR A
PUSH ACC
PUSH ACC
RETI
END

//以下程序只是一个范例 

void error(void);

//定时器0,清除定时器1的计时
void int_t0(void) interrupt 1 {
TL0=TL0+68;TH0=0xfd; //700
TH1=0xfb;
}
//定时器1,中断作为看门狗
void int_t1(void) interrupt 3 {
error(); //复位
}

unsigned char adds;
unsigned char b_job0[5][3];    //job0用到的数据,如A/D采集的数据,一共5组,每组3个,其中一个有效,其余2个备用
unsigned char b_job1[5][3];    
unsigned char b_job2[5][3];

void job0(void) {
unsigned char i;
adds=0;
for (i=0;i<5;i++) {         //数据采集部分,此处简化过程
  b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=123;
}
while (1) {}
}
void job1(void) {
unsigned char i;
adds=1;
for (i=0;i<5;i++) {         //数据采集部分,此处简化过程
  b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=23;
}
while (1) {}
}
void job2(void) {
unsigned char i;
adds=2;
for (i=0;i<5;i++) {         //数据采集部分,此处简化过程
  b_job0[i][0]=b_job0[i][1]=b_job0[i][2]=12;
}
while (1) {}
}

//为了在复位时不把b_power清零,连接时必须和nostart.obj连接
void main(void) {
unsigned int b_power;
unsigned char b_test_ram,i,j;
TMOD=0x11;
TH0=0xfd;TH1=0xfb;
ET0=TR0=1;
ET1=TR1=1;
EA=1;
if (b_power!=0x1234) { //b_power不等于0x1234表示刚开机
  b_power=0x1234;
  adds=0;    //第一次执行job0
} else {    //软件复位处理程序,主要是根据产生复位的地址来继续执行
      //RAM数据错误检测和恢复,3中取2相等法
  for (i=0;i<5;i++) {
  for (j=0;j<2;j++) {
   b_test_ram=job0[i][j];
   if (b_test_ram==job0[i][j+1]) break;
   b_test_ram=job0[i][j+1];
  }
  if (j==2) break;
  }
  if (i!=5) {}//处理job0数据出错

  for (i=0;i<5;i++) {
  for (j=0;j<2;j++) {
   b_test_ram=job1[i][j];
   if (b_test_ram==job1[i][j+1]) break;
   b_test_ram=job1[i][j+1];
  }
  if (j==2) break;
  }
  if (i!=5) {}//处理job1数据出错

  for (i=0;i<5;i++) {
  for (j=0;j<2;j++) {
   b_test_ram=job2[i][j];
   if (b_test_ram==job2[i][j+1]) break;
   b_test_ram=job2[i][j+1];
  }
  if (j==2) break;
  }
  if (i!=5) {}//处理job2数据出错

  switch (adds) {
  case 0:job0();break;
  case 1:job1();break;
  case 2:job2();break;
  }
}
while (1) {}
}


关键字:软件看门狗  softdog.c 引用地址:软件看门狗 softdog.c

上一篇:各种烧写文件格式简介
下一篇:堆栈的一些基本概念

推荐阅读最新更新时间:2024-03-16 15:47

基于STM32、FreeRTOS 实现硬件看门狗+软件看门狗监测多任务的方法
我们都知道硬件看门狗的目的:是用来监测系统,防止系统死机,并在死机的情况下使系统复位重启。 在RTOS操作系统中,如果任务(线程)较多,出现高优先级任务长时间占用CPU资源,低优先级任务长时间得不到执行这种想象,那么我们的系统就是具有Bug的系统。 如上描述,假如我们的线程没有死机,只是长时间得不到执行。在这种异常情况下,我们又不希望系统复位,只希望执行特定代码,那我们该如何来避免这种问题呢? Ⅰ关于看门狗 硬件看门狗:利用一个定时器计数电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时“喂狗”。 因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内喂狗,就使得看门
[单片机]
基于STM32、FreeRTOS 实现硬件<font color='red'>看门狗</font>+<font color='red'>软件</font><font color='red'>看门狗</font>监测多任务的方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved