智能电能表远程升级方法与流程

文档序号:26101543发布日期:2021-07-30 18:12阅读:311来源:国知局

本发明涉及智能电表领域,特别涉及一种智能电能表远程升级方法。



背景技术:

智能电表的主芯片,主要采用单芯片,无操作系统的方案。嵌入式芯片资源限制的原因,智能电表的程序升级,仍然使用预先整块程序存储备份,再进行更新的模式。现在智能电表的功能越来越复杂化,智能表的程序占用空间也越来越大,对芯片的flash资源要求越大,提高了产品的设计成本。同时存在为了更新一个小功能,而需要升级整块电能表的程序的问题。

目前,单芯片无操作系统的嵌入式固件升级,存在以下缺点:(1)无法灵活独立地,进行部分程序的模块化升级。(2)方案设计需要预留完整固件大小的flash空间,浪费flash资源。(3)固件升级需要传输完整的固件,导致升级时间过长。



技术实现要素:

本发明提供了一种智能电能表远程升级方法,以解决至少一个上述技术问题。

为解决上述问题,作为本发明的一个方面,提供了一种智能电能表远程升级方法,包括:

在智能电能表的程序中,为每一个可独立升级的程序模块构造一个函数调用过渡接口;

所述函数调用过渡接口为一个有固定的绝对地址定位的函数,其参数包括功能子函数索引和数据指针、返回参数是用于反馈接口执行情况的无符号整型,函数调用过渡接口用于根据传入的功能子函数索引参数来调用模块内对应的功能子函数,并将数据指针参数传递给该功能子函数,以使其它模块能够任意调用该模块内部的功能子函数;

任何一个程序模块需要独立升级更新功能时,保证其函数调用过渡接口的绝对地址是固定的,以使该模块内被其它的模块调用的功能子函数能够任意更新改动功能代码,而不用考虑因为重新编译链接时,功能子函数的地址改变、与其它模块不兼容的问题,从而使智能电能表程序中的一个或多个程序模块得以独立地升级。

优选地,将模块所有的程序分配在指定flash地址,并保证函数调用过渡接口分配在该段的启始地址,以保证每个模块的函数调用过渡接口的绝对地址固定不变,以使模块程序功能升级时,更改后的模块程序经重新编译链接,虽然其中的功能子函数的地址对应改变,但也不会影响其它的模块的调用,从而实现智能电表固件模块化的独立升级。

由于采用了上述技术方案,本发明实现了模块内的功能子函数,不需要逐个定位绝对地址,仍然可以被外部模块调用,增加了程序模块化的独立升级开发的灵活性,以及提高产品的安全性和兼容性,大幅度地缩短程序升级开发和测试调试的周期。程序模块化的独立升级,使得在工程设计规划时,降低了对mcu程序固件flash的空间需求。放宽了产品对mcu的选型要求,同时又有效降低产品的成本。

具体实施方式

以下对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。

本发明创建构造一个程序模块的函数调用过渡接口,通过这个函数调用过渡接口,一个程序模块可以任意调用,其它的程序模块内的任何功能函数,不会因为该模块单独升级后,其中的功能函数代码更新,重新编译链接,导致的功能函数地址更改,而无法被其它模块正常调用的问题。

整个智能表的程序中,每一个可独立升级的程序模块,都需要构造一个函数调用过渡接口。函数调用过渡接口是一个有固定的绝对地址定位的函数。这个函数的参数包括:功能子函数索引,数据指针,返回参数是无符号整型,反馈接口执行情况。函数体主要实现的任务,是根据传入的功能子函数索引参数,来调用该模块内的对应的功能子函数,并将数据指针参数传递给该功能子函数,从而其它模块可以任意调用该模块内部的功能子函数。

任何一个程序模块需要独立升级更新功能时,只要保证其函数调用过渡接口的绝对地址是固定的。该模块内,有被其它的模块调用的功能子函数,都可以任意更新改动功能代码,而不用考虑因为重新编译链接时,功能子函数的地址改变,与其它模块不兼容的问题。从而达到程序模块灵活独立升级的目的。

在一个优选的实施例中,本发明中的函数调用过渡接口示意性地表示如下:

在创建程序模块的函数调用过渡接口时,先设计模块需要向外部(其它程序模块)开放的,功能子函数(参见上文中的uint8_tsub_funa(void*p)),定义每个功能子函数索引(参见上文中的“//modulex功能子函数索引”部分)。函数调用过渡接口内,根据功能子函数索引,再调用对应的功能子函数(参见上文中的“switch(index)”部分),传入数据指针(void*p)。将模块所有的程序,分配在指定flash地址(参见上文中的“placeataddressmem:0x00020000{readonlysection.modulex}”部分),并保证函数调用过渡接口(参见上文中的“uint8_tmodule_x(uint8_tindex,viod*p)”),分配在该段的启始地址,以保证每个模块的函数调用过渡接口,绝对地址固定不变。例如,函数调用过渡接口的地址为0x00020000。

在一个优选的实施例中,本发明中的模块程序功能需要升级时的示意性地表示如下:

当模块程序功能需要升级时,更改后的模块程序,重新编译链接,其中的功能子函数的地址对应变化了,但是也不会影响其它的模块的调用,从而达到智能电表的固件模块化独立升级。

模块升级之前,subfuna功能子函数的flash地址为0x00020b29,其它模块调用该函数的路径为a->b。即,先经过函数调用过渡接口路径a。再根据函数调用过渡接口,去调用功能子函数路径b。

在模块功能升级之后,subfuna功能子函数的flash地址,变改为0x00020079,其它模块调用该函数的路径变为c->d。虽然由于功能子函数的flash地址改变了,其它未同步升级的模块,仍然可以正确调用到功能子函数subfuna。因为函数调用过渡接口的绝对地址固定不变,所以路径a和路径c,其实是相同的,这就是实现程序模块化的独立升级目的关键。

由于采用了上述技术方案,本发明实现了模块内的功能子函数,不需要逐个定位绝对地址,仍然可以被外部模块调用,增加了程序模块化的独立升级开发的灵活性,以及提高产品的安全性和兼容性,大幅度地缩短程序升级开发和测试调试的周期。程序模块化的独立升级,使得在工程设计规划时,降低了对mcu程序固件flash的空间需求。放宽了产品对mcu的选型要求,同时又有效降低产品的成本。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1