本软件功能用途:监控电脑或服务器exe程序运行,在exe程序由于异常或其他原因退出后,自动启动exe程序,具有开机自启动功能,可以在开机后自动运行监控程序本身并启动被监控exe程序
2.软件安装本软件为纯绿色软件无需安装,解压到系统任意位置即可运行。
3.软件说明3.1软件目录3.2软件首次启动用户首次启用需要进行软件注册,软件会自动识别机器码
用户需要联系我方技术人员,提供机器码后,我方技术人员会提供注册码给用户
输入注册码后点击注册进入主程序
3.3软件使用主程序下方按钮中
注册按钮-更换授权或者重新授权
开机启动-勾选后开机自动启动程序
添加应用-点击程序路径后的选择被监控程序,如果需要额外设置启动参数,可以在启 动参数中设置,可在程序名称中标识程序方便管理
保存配置-保存当前监控配置
移除配置-移除当前监控配置
重启应用-重启所选被监控程序
本软件功能用途:监控电脑或服务器exe程序运行,在exe程序由于异常或其他原因退出后,自动启动exe程序,具有开机自启动功能,可以在开机后自动运行监控程序本身并启动被监控exe程序
2.软件安装本软件为纯绿色软件无需安装,解压到系统任意位置即可运行。
3.软件说明3.1软件目录3.2软件首次启动用户首次启用需要进行软件注册,软件会自动识别机器码
用户需要联系我方技术人员,提供机器码后,我方技术人员会提供注册码给用户
输入注册码后点击注册进入主程序
3.3软件使用主程序下方按钮中
注册按钮-更换授权或者重新授权
开机启动-勾选后开机自动启动程序
添加应用-点击程序路径后的选择被监控程序,如果需要额外设置启动参数,可以在启 动参数中设置,可在程序名称中标识程序方便管理
保存配置-保存当前监控配置
移除配置-移除当前监控配置
重启应用-重启所选被监控程序
1.前言
很多时候我们需要将程序中的一些参数、数据等存储在EEPROM或者Flash中,达到掉电保存的目的。但有些情况下,程序需要频繁的修改这些参数,如果每次修改参数都进行一次保存,那将大大降低存储器的寿命。尤其是单片机内部Flash,以STM32F030K6T6为例,擦写寿命只有1000次。当然,这是最小值,实际可能比这个多,但也是有风险。
因此,最好的办法就是在程序运行中不进行保存操作,只在断电时保存一次。
掉电保存的关键是怎样检测掉电瞬间,方法有很多种:
1. 通过外部电路检测电源,触发IO中断。
2. 通过单片机的PVD(可编程电压检测器) 中断检测。
3. 通过ADC看门狗中断检测。
不管那种方式,一般都是通过中断来实现,主要是为了快速响应。
今天主要介绍第三种方式,通过ADC看门狗实现掉电保存。
2.硬件设计
2.1掉电时间
掉电保存的前提是断电后电源电压是缓慢下降的,这样才有足够的时间去检测掉电并保存数据。因此,电源上必须有个大电容,保证电源断开后能继续给单片机供电。
具体需要维持多长时间,要看存储器的擦写周期。以STM32F030K6T6的内部存储器为例,擦除一页需要30ms,写入一个16位数据需要53.5us。根据实际需要擦除和写入的数据多少来计算至少需要多少时间。
还需要关注一个参数,编程电压。在用示波器测量掉电时的波形时,测量出从断电瞬间到电压降低到2.4V时的时间,该时间大于总的数据擦写的时间即可。当然要留有一定裕量。如果时间不够,就要加大电容了。
2.2ADC检测
ADC检测掉电的方式有两种,一种是通过某个通道直接采集电源电压(或者分压后采集),另一种是采集内部参考电压Vrefint来判断电源电压。
第一种方式很好理解,采样值就代表电源电压,可以直接去触发ADC的看门狗中断。
第二种方式由于内部参考电压是不变的,STM32F030是1.23V,有一定误差。当电源电压变化时,ADC采集的参考电压会发生变化,因此也可以判断通过这个变化触发看门狗中断。这里有个前提,即单片机的VREF引脚或DD引脚就是要检测的电源电压。
3.软件设计
首先打开STM32CubeMx,配置一下ADC,如下。
首先需要使能Vrefint Channel,如果需要其它通道也可以使能。
其次需要使能ADC的看门狗,看门狗通道选择Vrefint,设置一下高/低门限值,使能看门狗中断模式,同时ADC的中断也要打开。
这里的高/低门限是指,当ADC的采样值大于高门限或小于低门限时,ADC的看门狗中断将被触发。
如果是用于掉电检测,只要关心高门限就行。正常时ADC采样值=1.23*4096/3.3,大约是1526左右,由于Vrefint和电源电压都有误差,所以只是个大概。如果我们将掉电电压检测值设为3.1V,那对应的ADC看门狗的高门限值应为1.23*4096/3.1,约1625左右。
生成代码后,在初始化完成启动ADC采样,如下:
uint32_t adc_buf;HAL_ADCEx_Calibration_Start(&hadc);HAL_Delay(100);HAL_ADC_Start_DMA(&hadc,(uint32_t*)&adc_buf,1);
然后再ADC的中断中添加保存数据的程序即。
void ADC1_IRQHandler(void){ /* USER CODE BEGIN ADC1_IRQn 0 */ /* USER CODE END ADC1_IRQn 0 */ HAL_ADC_IRQHandler(&hadc); /* USER CODE BEGIN ADC1_IRQn 1 */ Save_Param(); //保存参数 while(1); /* USER CODE END ADC1_IRQn 1 */}
这里有两点需要注意:
一是在中断中先关闭功耗较大的外设,比如液晶背光、数码管等。使断电时电源电压下降不至于太快。
二是在保存数据后关闭看门狗中断,或者直接死循环(因为已经断电,也不需要执行其它程序了)。这样做主要是为了防止电压下降的太慢,多次触发看门狗中断,导致最后一次写入错误。