dog timer */
#define WDIOC_SETOPTIONS _IOR(WATCHDOG_IOCTL_BASE, 4, int)
#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int)
int Getch (void) //无回显的从屏幕输入字符,来达到喂狗的目的
{
int ch;
struct termios oldt, newt; //终端设备结构体
tcgetattr(STDIN_FILENO, &oldt); //获得终端属性
newt = oldt;
newt.c_lflag &= ~(ECHO|ICANON); //设置无回显属性
tcsetattr(STDIN_FILENO, TCSANOW, &newt); //设置新的终端属性
ch = getchar(); //从键盘输入一个数据
tcsetattr(STDIN_FILENO, TCSANOW, &oldt); //恢复终端设备初始设置
return ch;
}
//suspend some seconds
int zsleep(int millisecond)
{
unsigned long usec;
usec=1000*millisecond;
usleep(usec); //睡眠usec秒
}
int Init()
{
int fd;
//open device file
fd = open("/dev/watchdog",O_RDWR); //打开看门狗设备
if(fd < 0)
{
printf("device open fail\n");
return -1;
}
return fd;
}
int main(int argc,char **argv)
{
int fd,ch;
int i,j;
char c;
struct watchdog_info wi;
fd=Init(); //打开终端看门狗设备
//读板卡信息,但不常用
ioctl(fd,WDIOC_GETSUPPORT,&wi);
printf("%d,%s\n",wi.options,wi.identity);
//读看门狗溢出时间,默认是5s
//重新设置时间为10s
i=5;
printf("%d\n",ioctl(fd,WDIOC_SETTIMEOUT,&i));
//读新的设置时间
printf("%d\n",ioctl(fd,WDIOC_GETTIMEOUT,&i));
printf("%d\n",i);
//看门狗开始和停止工作,打开和关闭设备具有同样的功能
//关闭
i=WDIOS_DISABLECARD;
printf("%d\n",ioctl(fd,WDIOC_SETOPTIONS,&i));
//打开
i=WDIOS_ENABLECARD;
printf("%d\n",ioctl(fd,WDIOC_SETOPTIONS,&i));
while(1)
{
zsleep(100);
if((c=Getch())!=27){
//输入如果不是ESC,就喂狗,否则不喂狗,到时间后系统重启
ioctl(fd,WDIOC_KEEPALIVE,NULL);
//write(fd,NULL,1); //同样是喂狗
}
}
close(fd); //关闭设备
return 0;
}
“小王,看清楚了吗?这就是看门狗的应用程序,可不是你说的什么流浪狗,哈巴狗”我拍拍小王的头说。
“看到了,只是感觉没啥用啊,除了你向我炫耀的左右外..”小王调皮地说道。
“啊!啊! 切,我是怕你不懂,所以就没怎么讲它的用途和原理,以及实际的应用..”我吓唬她到,“难的在下一节有关看门狗驱动的编写上,知道不..”
“嗯..嗯,知道,你啊,一点幽默都不懂..不想跟你说了..”小王生气的说…
“好了,不跟你耍嘴皮子啦,我还是给你说说这个程序咋用吧..”我不耐烦的说。
你,这样,先gcc编译一下,生成可执行的文件,然后下到板子上运行,这个时候你要小心啦,要不断的按键盘(除了ESC),否则系统就会重启啦,就像你开始的那样。哈哈哈…
相关阅读: