请教马老师,看门狗在studio中模拟仿真,怎么不动作?
这两天编了一个程序,放到studio模拟仿真,观察各寄存器中的数据.但仿真过中,发现使能的看门狗在C程序中用(WDR();)却一点反映也没有,直到看门狗溢出为止.另外想请教一下,AVR上电复位及复位后的单片机内的各寄存器,数据存储器内的状态是什么样的?运行过程中复位,会丢失哪些数据? 试着用汇编写了一个程式用studio模拟,用命令WDR,同样也没有反应.看门狗同样是发生溢出复位.
是不是只有用硬件才能模拟呢? AVR的复位有上电复位、外部RESET复位、看门狗复位、掉电检测复位,这些复位电路机制是由芯片内部硬件电路实现的,STUDIO的软件仿真不能模拟这些复位的。
不管由什么原因引起的复位,复位后各个i/o寄存器为复位的初始值,这些值在器件的手册中都明确的给出了(大部分为0,个别为1),程序记数器的值为0000或为熔丝设定的BOOTLOAD区的首地址。
而工作寄存器组的32个寄存器以及数据存储器中的值在上电复位后应该为不确定,其它情况复位后,32个寄存器以及数据存储器中可能保存复位前的数值,但不可靠。因为你不能确定程序执行到何处产生的复位,那些数据有效,那些数据无效的。
复位后,AVR总是从头开始执行程序的,当然一开始就是初始化代码了。有些AVR有个I/O寄存器,在这里面记录着复位的原因。因此在开始的初始化程序中可以访问该寄存器,了解到是由何重原因引起的复位,然后做不同的处理,这为编写实现高可靠性的系统程序提供了手段,但关键的问题是你怎样确保系统运行的重要数据在任何情况下都是有效可靠的。要实现这样的功能,不但在软件上要很好的设计,还需要硬件电路的配合才行。
AVR在设计上提供了很多的用于提高系统的抗干扰、提高系统运行可靠行的手段,如低电压检测、硬件看门狗等,这对于工业控制系统非常重要,也是AVR的非常重要的优点之一。但提供了手段只是表示可能,你真正的会使用要看你的能力和水平了。
我驾驶普桑车或一部F1赛车,开80公里/H都可以的。但跑到250KM/H,普桑本身根本就不能跑到250码,F1没问题,可是我驾驶的话也跑不到250码,我的技术不行。舒马赫就行,因为他是专业的车手。
51就是普桑,AVR如同F1。所以,要使AVR跑起来不难,但你要AVR跑的快、跑的好,还要跑的安全,你就必须刻苦学习钻研,成为专业的高手后才能驾御它。 ......教书,育人......
谢谢你! 有些AVRI/O寄存器记录复位的原因。如此说来,查到复位的原因,不就可以找到是软件设计的问题,还是硬件设计的问题,抑或还是其它问题了?这点很重要,对设计一个尽量完美的系统,至关重要哦!
还有,有没有一种这样的功能,当它复位之前也像中断一样将复位点保存下来?保存复位点也就几个时钟周期,这点应该可以做到吧?如此一来,通过某种措施使复位之后PC有两种选择:一,从头开始执行程序;二,从复位点开始热行。如此一来对某些很重要的系统,可以保持没有复位前一样的运行状态。岂不妙不可言?
关于普桑和F1的理论,令人回味无穷! 还有,有没有一种这样的功能,当它复位之前也像中断一样将复位点保存下来?保存复位点也就几个时钟周期,这点应该可以做到吧?如此一来,通过某种措施使复位之后PC有两种选择:一,从头开始执行程序;二,从复位点开始热行。如此一来对某些很重要的系统,可以保持没有复位前一样的运行状态。岂不妙不可言?
=============================================================
目前没有任何的单片机本身具备这种功能的,单片机毕竟是单片机,没有人聪明。利用AVR的特点,加上外围硬件的配合以及软件的巧妙设计,以上功能可以实现的。我做过一些产品的设计就具备这样的那里。当其在工作中,你可以任意的拔掉电源,但一旦上电稳定后,系统就会接着断电前的任务(如做了一半的工作)继续完成下去的。
准确严格的从发生复位时的语句继续执行是做不到的,或着是非常不容易办到的。主要是记录状态,把一个大任务,分成许多可分离和相对独立状态。系统记录状态,上电后,只要重新执行没有完成的状态,不是从头开始。 受益非浅! 感受很深啊!
页:
[1]