参考答案:
【问题1】
(1)>或大于
(2)修改定时器的计数值(或重新设定看门狗的定时周期)
(3)溢出(或超时)
(4)系统复位中断
【问题2】
(1)类型修饰符,防止编译器对代码进行优化
(2)设置看门狗的分频因素为1/128、使能中断产生
(3)使能看门狗定时器
(4)统一编址
(5)小端方式
详细解析:
本题考查嵌入式系统中看门狗的应用以及驱动程序的设计。
【问题1】
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。
看门狗,又叫watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。
所以,假设某嵌入式系统程序完整运行所需的周期时间是tp,看门狗的定时周期为tw,要求tw大于tp,在程序运行过程中需要定时修改定时器的计数值(俗称“喂狗”),只要程序正常运行,定时器就不会溢出。若由于干扰等原因使系统不能在tp时刻修改定时器的计数值,定时器将在tw时刻溢出(或超时),引发系统复位中断,使系统得以重新运行。
【问题2】
(1)volatile的本意是“易变的” 因为访问寄存器要比访问内存单元快的多,所以编译器一般都会作减少存取内存的优化,但有可能会读脏数据。当要求使用volatile声明变量值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。精确地说就是,遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问;如果不使用volatile,则编译器将对所声明的语句进行优化。(简洁的说就是:volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错)。