一种减少电力设备固件升级量的方法

文档序号:9727186阅读:430来源:国知局
一种减少电力设备固件升级量的方法
【技术领域】
[0001]本发明涉及电力设备固件升级领域,尤其涉及一种减少电力设备固件升级量的方法。
【背景技术】
[0002]目前,随着智能电网建设的不断推进,电力设备中MCU的应用越来越广泛,在很多情况下,如现场使用的设备需要增加新功能、现场运行后发现BUG等等,都要求更新MCU的固件程序;同时由于电力设备往往工作在无人值守的环境下,且数量众多,一旦需要对数以万计的终端进行现场更新,就会耗费大量现场服务的人力、物力和时间。
[0003]当前各厂家基于远程通信网络使用IAP在线编程技术实现设备远程固件升级。该方案虽然解决了现场升级的繁重工作量,但存在着弊端,新旧固件即使只有略微的差别,仍需要下载完整的新固件进行替换升级。这种每次升级都需要替换整个固件的方式增加了升级过程时间,消耗了大量网络通信资源,增加了升级失败率。

【发明内容】

[0004]本发明的目的在于提供一种减少电力设备固件升级量的方法,旨在解决现有技术对电力设备固件升级时出现的效率低、浪费网络资源等问题。
[0005]本发明的技术方案是:
一种减少电力设备固件升级量的方法,它包括:
51、电力设备固件的数据组织步骤;
52、电力设备固件的区域内函数组织步骤;
53、电力设备固件的全局变量、数组、函数参数的组织步骤;
54、电力设备固件的远程升级步骤。
[0006]本发明的步骤S1具体包括以下步骤:
S1-1、以功能模块或者对象为单位将电力设备的固件存储空间划分成若干个独立分散的区域,各区域中对应存放相应的功能模块或者对象,并设置区域的固定位置、大小以及BIN文件名称,所述的区域中至少有一个区域存放Boot loader功能,前述Boot loader功能用于实现初始化设备、固件升级功能;
S1-2、在电力设备的固件存储空间中通过分散加载机制为链接器指定各区域BIN文件名称和区域位置的放置信息;
S1-3、区域划分以后通过编译程序生成对应的BIN文件;在升级单独的某个区域时,提取该区域对应的BIN文件,并通过预先固化的Bootloader功能模块将前述文件的升级数据固化到电力设备的对应固件存储空间。
[0007]本发明的步骤S1-1中,划分区域时预留一定的空间以备增加功能,若已划分的区域不够用时,能够再划出一块还未使用的区域,不影响其他区域。
[0008]本发明的步骤S2具体包括以下步骤: S2-1、在电力设备固件中使用函数壳和伪指令控制区域的连带关系,为区域之间存在相互调用关系的函数建立相应的函数壳,区域之间调用函数时都需要先通过函数壳,再执行真正的功能;
52-2、使用伪指令固定函数壳在区域内的位置,编译生成后函数地址不改变,修改函数壳对应的函数只改变本区域,不影响到调用它的其他区域。
[0009]本发明的步骤S2-1中,函数壳作为函数之间调用的中间人,函数壳采用下述表达式:
funct1n NAME() { —NAME() }funct1n —NAME() { # do stuff here }
NAME ()即是—NAME ()函数的函数壳,只实现调用—NAME ()函数的功能,而具体功能在—NAME()函数中实现;其他区域通过调用NAME()函数壳来间接使用—NAME()功能。
[0010]本发明的步骤S3,具体包括以下步骤:
53-1、在电力设备固件中使用1级、2级空类型指针变量控制区域的连带关系,减少区域之间连带升级;
S3-2、申请2级空类型指针变量代替直接使用全局变量或数组,保证编译后即使变量改变也不会扩大关联区域的升级范围;
S3-3、使用1级空类型指针传递函数的实际参数,即使实际参数改变也不会扩大关联区域的升级范围,前述1级空类型指针采用下述方式表述;typedef struct tagParam{ int nParamlndex;
// define hereint nResult;
} Param;
void funct1n NAME(void *p) { —NAME(p) }void funct1n —NAME(void 氺p)
{ Param 氺param = (Param 氺)p;switch (param-> nParamlndex)
{# do stuff here }
}
其他区域调用NAME(p)函数壳时将实际参数赋予void *p,__NAME(p)函数可以根据param-〉nParamlndex参数选择执行具体的功能,最终返回执行的结果;
53-4、区域之间相互调用的函数的参数不需要建立固定的参数列表库,利用空类型指针可以动态变化。
[0011]本发明的步骤S4,具体包括以下步骤:
54-1、将需要升级的区域编译生成BIN文件,并在文件的开头增加升级信息;升级信息包括需要升级的区域数量,每个需要升级的区域的首地址、长度以及校验码,制成升级固件包;
S4-2、通过远程通信网络下载至指定的电力设备;
S4-3、电力设备接收到下发的升级固件及指令,并核对准确后重启设备,通过预先固化在设备里的Bootloader程序将升级数据固化到电力设备的对应固件存储空间。
[0012]本发明的有益效果:
本发明提出的一种减少电力设备固件升级量的方法,可以实现产品投运后,根据功能需求变化只对更改了功能的区域进行升级,从而避免替换全部程序,减少了固件升级量,减少了升级过程对网络资源的消耗,提高了固件升级的效率,另外降低了产品投运后的维护成本,增强了产品的市场竞争力。
[0013]本发明的区域之间需要相互调用函数,在电力设备固件中使用函数壳和伪指令控制区域的连带关系,减少区域之间连带升级。首先,为区域之间相互调用的函数建立相应的函数壳,函数壳起到“中间人”的作用,区域之间调用函数时都需要先通过函数壳,再执行真正的功能;然后,使用伪指令固定函数壳在区域内的位置,修改函数壳对应的函数只会改变本区域,不会影响到调用它的其他区域,从而切断区域之间的连带升级,达到减少固件升级范围的目的。
[0014]本发明的区域内需要使用全局变量、数组,区域之间需要相互调用全局变量、数组,这些全局变量、数组以及区域之间相互调用的函数的参数需要变化,在电力设备固件中使用1级、2级空类型指针变量控制区域的连带关系,减少区域之间连带升级。使用1级空类型指针传递函数的实际参数,即使实际参数改变也不会扩大关联区域的升级范围;申请2级空类型指针变量代替直接使用全局变量或数组,保证了即使变量改变也不会扩大关联区域的升级范围。
[0015]
【附图说明】
[0016]图1是本发明实施例的减少电力设备固件升级量的方法的流程图图2是本发明实施例的区域之间关联示意图
图3是本发明实施例的区域之间调用函数流程图
【具体实施方式】
[0017]下面结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0018]如图1所示,本发明提出的一种减少电力设备固件升级量的方法,包括以下步骤:为了使电力设备固件的功能模块可以独立升级,需要对电力设备固件的数据组织方式重新规划,包括:
以功能模块或者对象为单位将电力设备的固件存储空间划分成若干个独立分散的区域,各区域中对应存放相应的功能模块或者对象,并设置区域的固定位置、大小以及BIN文件名称,区域固定了位置,即区域的首地址固定后,通过编译程序生成对应的BIN文件,最后将BIN文件固化到电力设备固件的对应存储空间。
[0019]区域划分的时候应预留出一定的空间以备增加功能使用,若该区域不够用时可再划出一块还未使用的区域,不影响其他区域。
[0020]区域划分以后内部的函数会相互调用,修改功能,这些操作只会影响本区域,不影响其他区域。
[0021]在升级单独的某个区域时,可以提取该区域对应的BIN文件,并通过预先固化在设备里的Bootloader程序将该BIN文件的升级数据固化到电力设备固件的对应存储空间。
[0022]设备中至少划分出一个区域存放Bootloader功能,Bootloader至少实现初始化设备、固定升级的功能。
[0023]如图2所示,区域之间需要相互调用函数,若仅划分区域,某个区域内的函数修改后,与之相互调用函数的区域会改变,随之又影响到其他有关联的区域。这种情况导致升级某个区域时,与之有关联的区域,甚至与关联区域有关联的区域都需要升级。
[0024]如图3所示,为了减少固件升级的范围,在不影响正常运行的前提下切断区域之间的连带升级,需要对电力设备固件的区域内函数组织方式重新规划,包括:
为区域之间相互调用的函数建立相应的函数壳,函数壳起到“中间人”的作用,区域之间调用函数时都需要先通过函数壳,再执行真正的功能,函数壳采用下述表达式:funct1n NAME() { —NAME() }funct1n —NAME() { # do stuff here }
NAME ()即是—NAME ()函数的函数壳,只实现调用—NAME ()函数的功能,而具体功能在—NAME()函数中实现;其他区域通过调用NAME()函数壳来间接使用—NAME()功能。
[0025]使用伪指令固定函数壳在区域内的位置,修改函数壳对应的函数只会改变本区域,不会影响到调用它的其他区域,从而切断区域之间的连带升级,达到减少固件升级范围的目的。
[0026]区域内需要使用全局变量、数组,区域之间需要
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1