APP下载

基于PowerPC软件的无源码异常中断定位方案

2023-10-08王逸凡朱帅琦

工程与试验 2023年3期
关键词:插桩源码上位

王逸凡,朱帅琦

(中国航发控制系统研究所,江苏 无锡 214063)

1 引 言

数字控制系统在航空航天等高安全性领域已经得到了广泛应用[1],控制软件的功能和复杂度不断增加,软件研发中引入的缺陷也越来越隐蔽,因此导致的异常中断定位就显得尤为重要[2-5]。目前,对基于PowerPC的控制软件,需要依赖编译生成的.map文件和源码进行异常中断定位[6-10],虽然定位准确,但该方法只适用于开发调试场景下的异常定位。由于软件源码和编译生成的.map文件涉及到软件的设计信息,软件作为产品交付时,一般不会提供源码和编译过程文件。因此,现有的定位方式给外场用户进行快速异常定位带来不便。

此外,随着数控软件更新频率不断提升,一个数控系统常常存在多个软件版本,维护成本大大增加。对于各个版本发生的异常中断,想要快速定位异常就完全依赖于内场开发人员的管理水平和反应速度,使用者在外场没有快速定位的手段和能力。

本文针对使用PowerPC的发动机控制软件,结合NVRAM的存储特性[11-14],设计了一种简易轻量化的异常中断定位及数据存储方案。可以在没有源码和编译文件的情况下,对发生中断的模块进行定位,对异常发生时的控制状态进行记录,简化了定位方法,方便外场使用。

2 异常中断介绍

嵌入式软件运行前,会在系统初始化时,对异常中断进行初始化,设置中断源。CPU在运行过程中一旦发生异常,就会中止处理器正常的执行,跳去执行异常处理程序。异常有多种类型,异常本身是中断的一种特例。本文介绍的PowerPC有19种异常中断,如表1[15]所示。

表1 异常及触发条件

当上述异常被触发后,软件的中断服务函数进入对应的异常处理程序,此时可以利用串口打印异常号及相关寄存器中的信息。目前,异常中断定位是将异常运行时代码位置、异常种类等信息打印出来,然后通过相应的.map文件查询异常发生的函数位置,从而实现异常定位。

3 异常中断定位方案

异常中断后软件一般会马上进行复位,通过串口打印出来的信息,有时候很难被PC端的使用者和机载设备捕捉到,偶发性的异常在复位后容易被忽视。同时,已交付产品一般不提供源码和.map文件,无法根据串口信息进行快速异常定位,给外场分析带来不便。

3.1 捕获异常位置

通过研究异常中断过程,当异常发生后,软件会跳转到异常中断服务函数中,中断发生后会马上跳出主程序。此时,如果将跳出位置记录下来,就可以不依赖.map文件对异常进行定位,从而捕获异常。

本文设计了一个异常数据标记函数,标记函数能够直接访问NVRAM进行读写操作,并将标记信息记录到指定地址。此外,宏定义一系列表征软件运行位置的标记作为函数入参,申请一片NVRAM空间用来存储异常信息。软件正常运行时,进入每个模块前都会先进行标记,同时覆盖NVRAM中上一个模块的记号。因为标记函数是在进入模块前进行标记,因此当异常中断跳出主程序时,NVRAM中存储的标记就是异常中断发生的模块位置,如图1所示。此外,结合异常中断服务函数,可以将产生异常的种类、异常中断发生次数、发生异常时软件状态信息等,也存储在NVRAM中。

图1 异常中断定位方式

由于异常中断后一般会进行复位,控制软件重新初始化运行。通过上述方式捕获异常中断后,要保证之前的异常中断信息能够保存下来,且需要多个相同大小的NVRAM空间,每次异常中断后,都对异常信息的存储位置进行偏移,写满后循环覆盖。在有限的空间下,只记录最近发生的几次异常中断信息,可记录的异常次数取决于分配的NVRAM空间大小。

3.2 显示异常信息

对于异常中断信息,还需要通过上位机进行解析,有两种查看方式:

(1)有监视上位机的情况下,将异常中断位置及其他异常信息传输给上位机,通过监视上位机对异常信息进行显示。

(2)对于装机状态,可在产品离线后,下载NVRAM数据,使用上位机解析回看近几次的异常中断位置及其他异常信息。

4 方案验证

针对该PowerPC的19种异常中断,可以通过软件和硬件的方式进行触发。这里以除零异常,即IVOR33-浮点数运算异常为例,对初始化和周期任务中的异常中断定位进行插桩验证。

对于初始化过程,借助NVRAM进行插桩。当软件运行到插桩代码时,先从NVRAM读取提前设置好的插桩代码的激活码。当软件初始化到插桩位置时,先将NVRAM中该激活码置为无效,然后运行插桩代码触发异常,如图2所示。

图2 利用NVRAM的插桩验证过程

采用这种触发方式的好处是,当软件在初始化过程中由于异常中断复位后,下次可以正常初始化,避免软件因为插桩导致异常而不断复位。此时,上位机会显示上一次异常中断发生的位置,与.map文件查询结果一致,并且显示中断号为33。下载NVRAM的数据,可以查看到异常发生的模块、异常中断类型等详细信息。

对于周期任务,通过上位机指令激活插桩代码的方式触发异常。控制软件在发生异常中断后复位,复位后将上次发生的异常模块及其他信息通过串口传输给上位机显示。上位机显示的异常中断位置与.map文件查询的异常中断函数位置一致,并且显示中断号为33。在不同位置多次注入异常,下载NVRAM数据,可以查看近几次发生异常的模块及异常发生前控制软件的运行状态。

以上插桩验证结果证明,本文设计的异常中断定位方案有效。对于不便提供源码和编译文件的场景,可以采用本文设计的方案,作为工程试验现场对控制软件异常中断定位的替代方案。

5 结束语

本文设计的方案主要是针对没有源码、没有.map文件的控制软件异常中断进行定位,是对开发端现有异常中断定位方法的补充。本文利用标记函数结合NVRAM对异常模块进行标记,模块可以是一个函数,也可以是功能集,颗粒度可以根据代码规模、硬件速度和时间余度等因素灵活设计。通过该方案,控制软件发生异常中断时,能够将异常定位并记录下来,在不依赖.map文件的情况下,通过上位机方便快捷地为用户提供异常中断信息。本文通过人为注入异常的方式,验证了上述方案的可行性和正确性。

猜你喜欢

插桩源码上位
基于网页源码结构理解的自适应爬虫代码生成方法
基于图神经网络的软件源码漏洞检测方法
基于TXL的源代码插桩技术研究
企业如何保护源码
基于性能分析的自适应插桩框架
特斯拉 风云之老阿姨上位
基于记录重播的嵌入式系统死锁检测方法
“三扶”齐上位 决战必打赢
基于ZigBee和VC上位机的教室智能监测管理系统
基于数据结构教辅系统的实验课程改革