一种基于注册机制的星上环境变量统一监管方法技术

技术编号:20724354 阅读:30 留言:0更新日期:2019-03-30 17:34
一种基于注册机制的星上环境变量统一监管方法,首先构建变量管理器,初始化变量管理器中变量的历史值,绑定触发事件,然后根据各变量轮询周期数遍历变量管理器中的每个变量单元状态,判断各个变量的历史值与当前值,进而调用变量对应触发事件函数,并更新变量的历史值,直至变量管理器的所有变量遍历完毕。

【技术实现步骤摘要】
一种基于注册机制的星上环境变量统一监管方法
本专利技术涉及航天嵌入式软件领域,特别是一种基于注册机制的星上环境变量统一监管方法。
技术介绍
随着对航天嵌入式软件的可靠性、安全性的要求越来越高,星载软件规模越来越大,对软件中各类变量的管理重要性日益凸显,一些变量在控制系统关键节点的容错判断和部件动作等起着至关重要的作用,直接关乎任务成败。越来越多样化的任务需求和通用化研制要求,导致星载软件规模和变量数目成倍增长,软件架构由以前的扁平式变为分层式,为保证各层数据的安全性和一致性,加强对从底层到应用层重点环境变量的统一监管迫在眉睫。以往的变量管理方法存在以下如下四个问题:(1)对于重点环境变量,统一识别变量变化是关键,当变量为注入或自主切换时,属于显示切换,但当变量为隐式切换时,例如通过内存地址直接修改变量时,往往难以识别,且如果当某个变量发生了非预期的变化时,无法进行及时保护。同时,由于大量需要监测的变量根据应用场景分别定义在不同的软件层次结构中,其触发函数和历史值的维护更加分散,易造成程序结构混乱,可读性差,变量保护不全面;(2)对于重点环境变量,还需要关注变量变化时是否进行了相应事件的触发,以往是在变量的各处切换时均调用触发事件,操作分散易漏,维护困难;若涉及变量切换赋值的代码逻辑发生变化,相应触发事件的调用位置需随之更改,经常一个变量赋值位置的变更导致了大段程序的变动,结构性差,不仅增加代码开销和维护成本,且极易出错。(3)对于计数器变量,统一识别不变化是关键,例如连续计数器变量,需要重点关注假分支是否清零完全,这里的连续计数器指的是N个条件为真时自加,任一条件为假时必须清零的计数器,但通常假分支较多,清零操作分散。长久以来,星载软件的计数器数量庞大,对于计数器的清零正确性均靠人工走查来确保正确性,维护计数器变得艰难,风险较大。
技术实现思路
本专利技术解决的技术问题是:克服现有技术的不足,提供了一种基于注册机制的星上环境变量统一监管方法,对分散环境变量和计数器进行统一注册管理和全方位活动性监测,对触发事件进行统一维护,保证平台各层环境变量和计数器使用安全性,有效解决了重点变量使用安全性,变量维护困难的问题,并具有良好的扩展性。本专利技术的技术解决方案是:一种基于注册机制的星上环境变量统一监管方法,包括如下步骤:步骤1,构建变量管理器;步骤2,初始化变量管理器中变量的历史值,将把所有注册的变量的历史值初始化为变量的当前初值;步骤3,遍历变量管理器中的每个变量单元状态,如果当前变量的地址pVar、触发事件地址pFunc均为合法有效的地址,则转入步骤4,否则进入步骤11;步骤4,设星上控制周期数为C,如果C是变量轮询频率Freq整数倍,则表示变量的轮询周期到,进入步骤5,否则等待直至C是变量轮询频率Freq整数倍,并进入步骤9;步骤5,获取当前变量的历史值OldValue,如果OldValue等于地址pVar对应的变量值,表示该变量无变化,则进入步骤6,否则进入步骤7;步骤6,如果当前变量应该前后无变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该变化,则进入步骤9;步骤7,如果当前变量前后应该变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该无变化,则转入步骤9;步骤8,当前变量的历史值更新为当前值;步骤9,判断变量管理器遍历是否完毕,若完毕,则结束,否则转入步骤3。所述的变量管理器包括变量单元,其中,变量管理器为二维向量表,包括注册需要监测变量的变量地址pVar、记录上一个轮询周期变量数值的变量历史值OldValue、指向变量切换后触发事件函数地址的触发事件地址pFunc(intold,intpVar)、变量轮询频率Freq、变量类型vType,其中,变量类型vType为1时,变量值发生变化,变量类型vType为2时,变量前后值无变化,触发事件对应函数的输入参数包括变量历史值old、变量地址pVar。所述的变量管理器为数组或者链表结构。4、一种计算机可读存储介质,所述的计算机可读存储介质存储有计算机程序,所述的计算机程序被处理器执行时实现如权利要求1-权利要求3任一所述方法的步骤。本专利技术与现有技术相比的优点在于:(1)本专利技术通过地址注册重点变量以及对变量的周期轮询,识别来自任意渠道发生的变量修改操作,甚至当变量发生非预期的变化时,程序能够及时触发事件采取保护措施,避免发生系统严重错误的风险。且通过地址注册变量,将分散变量统一管理,后期不论软件结构如何变化,变量始终都用最新编译后的变量地址注册监管,保证环境变量使用安全性,有效解决了维护困难问题,并具有良好的扩展性;(2)通过触发事件配置实现变量灵活集中管理,使用者编码时只需要关注变量使用与方案的一致性,不用关心变量是否在某处发生了切换以及是否有触发事件。本专利技术方法将变量的应用场景和触发事件隔离维护,变量切换不会导致任何程序的变动,后期走查、单元测试工作完全省略,大大提高软件开发效率和可靠性;(3)通过对计数器变量清零事件的定制和监测,保证每个计数器在满足任意符合清零的条件时,按照规定的清零频率进行清零。使用者只需要关注计数器是否按照方案条件进行自加或自减操作,不用关心计数器在某不满足条件的分支是否进行了清零等的操作的逻辑,便捷操作不仅提高了开发效率,同时提高了计数器使用的健壮性。附图说明图1为变量管理器示意图;图2为一种基于注册机制的星上环境变量统一监管方法流程图。具体实施方式本专利技术的主要原理是设计一个变量管理器,将变量的地址、变量切换的触发事件地址、轮询周期、变量类型等作为可配置项,将重点变量按照各属性注册到管理器后,通过专门开发的变量状态监测程序对变量管理器中的变量按配置的周期进行活动性检测,当发现活跃变量时,触发相应配置事件,完成相应状态转换。下面结合附图对本专利技术方法进行详细说明,如图2所示本专利技术方法包括如下步骤:步骤1,根据初始化变量管理器,变量管理器中由变量单元组成,可组织成数组或者链表结构,进入步骤2;所述变量管理器为二维向量表,如图1,每行为一个变量单元,每个变量单元包括以下字段:1、变量地址pVar,用于注册需要监测的变量,该值区别与其他变量;2、变量历史值OldValue,记录上一个轮询周期该变量的数值;3、触发事件地址pFunc(intold,intpVar),指向该变量切换后触发事件的函数地址,触发事件采用函数指针的方式定义,函数原型的输入虚参有两个,old是变量历史值,pVar是变量地址;4、轮询频率Freq,表示对该变量轮询的频率;5、变量类型vType,用于区分不同变量事件类型,比如配置为1时,表示该变量值发生变化时触发事件,配置为2,表示该变量前后变量值无变化时触发事件,如连续计数器变量;步骤2,根据任务要求初始化变量管理器中的历史值,将把所有注册的变量历史值初始化为变量当前初值。因为上电后第一拍,所有变量均为初始化状态,无历史值,应将历史值初始化与当前值一致,否则会认为上电后变量有变化从而误触发事件,进入步骤3;步骤3,变量状态监测程序依次遍历变量管理器中的每一个变量单元的状态,进入步骤4;步骤4,取当前变量的地址pVar以及触发事件地址pFunc,若pVar和pFunc两个地址均是合法有效的地址,进本文档来自技高网
...

【技术保护点】
1.一种基于注册机制的星上环境变量统一监管方法,其特征在于包括如下步骤:步骤1,构建变量管理器;步骤2,初始化变量管理器中变量的历史值,将把所有注册的变量的历史值初始化为变量的当前初值;步骤3,遍历变量管理器中的每个变量单元状态,如果当前变量的地址pVar、触发事件地址pFunc均为合法有效的地址,则转入步骤4,否则进入步骤11;步骤4,设星上控制周期数为C,如果C是变量轮询频率Freq整数倍,则表示变量的轮询周期到,进入步骤5,否则等待直至C是变量轮询频率Freq整数倍,并进入步骤9;步骤5,获取当前变量的历史值OldValue,如果OldValue等于地址pVar对应的变量值,表示该变量无变化,则进入步骤6,否则进入步骤7;步骤6,如果当前变量应该前后无变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该变化,则进入步骤9;步骤7,如果当前变量前后应该变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该无变化,则转入步骤9;步骤8,当前变量的历史值更新为当前值;步骤9,判断变量管理器遍历是否完毕,若完毕,则结束,否则转入步骤3。

【技术特征摘要】
1.一种基于注册机制的星上环境变量统一监管方法,其特征在于包括如下步骤:步骤1,构建变量管理器;步骤2,初始化变量管理器中变量的历史值,将把所有注册的变量的历史值初始化为变量的当前初值;步骤3,遍历变量管理器中的每个变量单元状态,如果当前变量的地址pVar、触发事件地址pFunc均为合法有效的地址,则转入步骤4,否则进入步骤11;步骤4,设星上控制周期数为C,如果C是变量轮询频率Freq整数倍,则表示变量的轮询周期到,进入步骤5,否则等待直至C是变量轮询频率Freq整数倍,并进入步骤9;步骤5,获取当前变量的历史值OldValue,如果OldValue等于地址pVar对应的变量值,表示该变量无变化,则进入步骤6,否则进入步骤7;步骤6,如果当前变量应该前后无变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该变化,则进入步骤9;步骤7,如果当前变量前后应该变化,则调用当前变量对应触发事件的函数,如果当前变量前后应该无变化,则转入步骤9;步骤8,当前变量的历史值...

【专利技术属性】
技术研发人员:李晶心何世民吴宗哲傅秀涛綦艳霞
申请(专利权)人:北京控制工程研究所
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1