热启动代码例程应用

热启动代码例程应用

对于工业控制计算机,往往设有有看门狗电路,当看门狗动作,使计算机复位,这就是热启动。热启动时,一般不允许从头开始,这将导致现有的已测量到或计算到的值复位,导致系统工作异常。

因而在程序必须判断是热启动还是冷启动,常用的方法是:确定某内存单位为标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如果它等于一个特定的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行初始化部份,并将0xaa赋与这两个内存单元。

根据以上的设计思路,编程时,设置一个指针,让其指向特定的内存单元如0x7f,然后在程序中判断,程序如下:

void main()

 {

char data *HotPoint=(char *)0x7f;

if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa)){else{ HotPoint=0x7e;

/*冷启动的处进

{

else

{

*HotPoint=0xaa;

*(++HotPoint)=0xaa;

}

}

然而实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位为0,当然也实现不了热启动的要求。

用C语言编程时,开机时执行的代码并非是从main()函数的第一句语句开始的,在main()函数的第一句语句执行前要先执行一段’起始代码在执行到判断是否热启动的代码之前,起始代码已将所有内存单元清零

1.首先修改源文件然后执行如下命令:Ax startup.ax 得到startup.obj文件。将此文件拷入HOTSTART.C所在目录。

2.将编好的C源程序用Cx.EXE编译好,得到目标文件HOTSTART.OBJ。 

3.用 Lx HOTSTART, STARTUP.OBJ 命令连接,得到绝对目标文件HOTSTART。 

4.用 OHS51 HOTSTART 得到HOTSTART.HEX文件,即可。 对于startup.ax的修改,根据自已的需要进行,如将IDATALEN EQU 80H中的80H改为70H,就可以使6F到7F的16字节内存不被清零。

声明:本内容为作者独立观点,不代表电子星球立场。未经允许不得转载。授权事宜与稿件投诉,请联系:editor@netbroad.com
觉得内容不错的朋友,别忘了一键三连哦!
赞 2
收藏 3
关注 23
成为作者 赚取收益
全部留言
0/200
成为第一个和作者交流的人吧