一种嵌入式设备的程序代码段自检方法及装置技术领域
本发明属于嵌入式系统应用技术领域,具体涉及一种嵌入式设备的程序代码段自
检方法及装置。
背景技术
嵌入式设备的可靠性和实时性一般要求都很高,任何情况下都要保证设备的可靠
动作,提高设备的可靠性和实时性是嵌入式产品设计的重点工作。由于一些不可预测的因
素或者是没有发现的潜在危险导致程序代码段异常,可能导致设备产生不可预知的危险,
在这种情况下很难保证设备动作的可靠性,甚至会对系统造成严重的后果。
发明内容
本发明的目的是提供一种嵌入式设备的程序代码段自检方法,用以解决嵌入式设
备程序代码段运行时出错的问题。
为解决上述技术问题,本发明提供一种嵌入式设备的程序代码段自检方法,步骤
包括:
1)解析目标文件,获取记录程序代码区的内存定位信息、代码区长度,并将整个程
序代码在内存中的备份区进行备份;
2)程序运行时,实时比较检测程序运行区和备份区数据;
3)处理比较结果,若一致,则数据正常;若不一致,则数据异常,并告警。
进一步地,还包括实时检测并判定CPU负荷情况,用于设定程序代码段自检任务门
槛值的步骤,所述门槛值包括监测时间间隔和数据自检粒度;CPU负荷增大时,减小数据自
检粒度和/或增大监测时间间隔;CPU负荷减小时,增大数据自检粒度和/或减小监测时间间
隔。
进一步地,设定门槛值时,将CPU负荷的变化分为若干个范围,每个范围对应一个
门槛值。
进一步地,还包括数据异常时,将异常情况写入报告的步骤。
本发明还提供一种嵌入式设备的程序代码段自检装置,包括如下模块:用于解析
目标文件,获取记录程序代码区的内存定位信息、代码区长度,并将整个程序代码在内存中
的备份区进行备份的模块;用于程序运行时,实时比较检测程序运行区和备份区数据的模
块;用于处理比较结果,若一致,则数据正常;若不一致,则数据异常,并告警的模块。
进一步地,还包括用于实时检测并判定CPU负荷情况,用于设定程序代码段自检任
务门槛值的模块,所述门槛值包括监测时间间隔和数据自检粒度;CPU负荷增大时,减小数
据自检粒度和/或增大检测时间间隔;CPU负荷减小时,增大数据自检粒度和/或减小监测时
间间隔。
进一步地,设定门槛值时,将CPU负荷变化分为若干个范围,每个范围对应一个门
槛值。
进一步地,还包括用于数据异常时,将异常情况写入报告的模块。
本发明的有益效果是:在解析目标文件时将程序代码区在制定的内存做备份,在
设备运行时实时比较检测程序运行区和备份数据。加入的程序代码段自检功能,使设备能
够在运行过程中实时检测程序代码段,并及时发现异常情况,一旦发现异常,设备会将异常
情况记录并告警;帮助现场工作人员尽快的定位并解决问题,保证了设备运行的安全性和
可靠性,避免问题的扩大而造成不可挽回的损失。
附图说明
图1是程序代码段自检任务流程图;
图2是CPU占用率检测任务流程图。
具体实施方式
下面结合附图说明,对本发明进行进一步详细说明。
本发明提供一种嵌入式设备的程序代码段自检方法,具体实施步骤如图1所示。
首先,初始化需要解析的目标文件和自检任务门槛的默认值。解析目标文件得到
程序代码段的地址和大小,并将程序代码段的数据复制到一个指定的内存位置,作为备份
代码区。自定义自检任务门槛的默认值,包括监测时间间隔和数据自检粒度。在此实施例
中,监测时间间隔默认值设置为10ms,数据自检粒度默认值设置为128字节。
然后,进行程序代码段检测任务。设备运行时,实时比较程序运行区代码段和备份
区代码段的128字节的二进制数据,实现对代码段的检测。没有异常就检测下一128字节的
数据,如果发现异常则告警并将异常情况写入报告,使现场人员及时发现异常,并方便技术
人员准确定位异常并改正错误。
其中,在设备运行时,代码段自检任务会根据CPU的负荷情况来设定代码段自检的
门槛值,门槛值包括监测时间间隔和数据自检粒度,做到在不影响设备性能的情况下保证
设备运行的安全性和可靠性。具体CPU占用率检测任务方法如图2所示。
在初始化阶段,记录一段固定延时的时间间隔,此时其他任务都没有开始运行,可
获取一个比较精确的标准参照时间间隔。该任务运行期间,记录一段固定延时的时间间隔
(和该任务初始化时的间隔一样),设备运行期间,该任务的优先级最低,只要有其他任务运
行,该任务就会被打断去执行其他任务,直到其他任务都执行完毕并处于挂起状态,该任务
才会被继续执行。CPU任务越多,执行越频繁,实际统计的时间间隔就越长。将标准参照时间
间隔和该时间间隔比较就能够得到CPU的占有率,知道CPU的负荷大小。
当CPU负荷比较大时,当前CPU任务比较繁重,调用更改程序代码段自检任务门槛
的接口,将程序代码段自检任务的数据自检粒度减小或者监测时间间隔增大,或者同时减
小数据自检粒度和增大监测时间间隔,通过此方法来降低自检速度,使得程序代码段任务
尽量小的减少对CPU的消耗。
当CPU负荷比较小时,当前CPU任务比较轻松,调用更改程序代码段自检任务门槛
的接口,将程序代码段自检任务的数据自检粒度增大或者监测时间间隔减小,或者同时增
大数据自检粒度和减小监测时间间隔,通过此方法来提高自检速度。
可具体设置为:当CPU占有率小于30%时候,CPU自检任务调用更改程序代码段自
检任务门槛的接口,将程序代码段自检任务的监测时间间隔改为2ms、数据自检粒度改为
256字节;当CPU占有率在30%~60%之间的时候,将门槛都恢复默认值;当CPU占有率大于
60%时候,CPU自检任务调用更改程序代码段自检任务门槛的接口,将程序代码段自检任务
监测时间间隔改为20ms、数据自检粒度改为64字节。
在上述实施例中,将CPU负荷情况分为三个范围,即30%以下、30%~60%之间、
60%以上,每一个范围对应一个门槛值,即30%以下门槛值为监测时间间隔2ms、数据自检
粒度256字节;30%~60%之间门槛值为监测时间间隔10ms、数据自检粒度128字节;60%以
上为监测时间间隔20ms、数据自检粒度64字节。作为其他实施方式,可根据实际情况,将CPU
负荷情况进一步细分成更多的范围,对应更多的门槛值,甚至是每个CPU负荷值对应一个门
槛值,此时可以通过直接计算或者查表来确定门槛值。
本发明还提供一种嵌入式设备的程序代码段自检装置,包括如下模块:用于解析
目标文件,获取记录程序代码区的内存定位信息、代码区长度,并将整个程序代码在内存中
的备份区进行备份的模块;用于程序运行时,实时比较检测程序运行区和备份区数据的模
块;用于处理比较结果,若一致,则数据正常;若不一致,则数据异常,并告警的模块。
上述嵌入式设备的程序代码段自检装置,实际上是基于本发明方法流程的一种计
算机解决方案,即一种软件构架,上述各种模块即为与方法流程相对应的各处理进程或程
序。由于对上述方法的介绍已经足够清楚完整,故对该装置不再进行详细描述。