专利名称:嵌入式系统中对rom程序的升级方法
技术领域:
本发明涉及计算机领域,尤其涉及一种嵌入式系统中对ROM程序的升级方法。
背景技术:
嵌入式系统中,使用ROM来保存软件,由于ROM是只读存储器,那么ROM上存储的软件是无法升级的。嵌入式系统中用ROM存储器保存软件时,还会有一片FLASH存储器来存储文件系统,一片RAM存储器保存运行堆栈及全局变量。由于FLASH存储器和RAM存储器是可以擦写的,显然,可以利用flash来保存升级软件部分,又不删除ROM原有程序而达到系统升级的功能。
发明内容
为了克服ROM上存储的软件无法升级的缺陷,本发明提出一种嵌入式系统中对 ROM程序的升级方法。本发明是这样实现的一种嵌入式系统中对ROM程序的升级方法,包括以下步骤a、在生成ROM软件时在每个软件函数开始位置设置一个升级调用程序模块;b、在FLASH中开辟一块独立的程序升级区,所述程序升级区用于保存升级程序包;C、需要升级软件时,制作升级程序包;d、将升级程序包写入到FLASH的程序升级区;e、升级调用程序模块检测FLASH中是否有升级程序包,若未发现所述的升级程序包,则执行步骤f,若发现所述的升级程序包,则执行g ;f、执行ROM软件中的原始程序;g、则将FLASH中的升级程序包拷贝到RAM中并执行升级程序。其中,升级调用程序模块包括系统所有函数的列表数组和列表枚举。函数数组中保存的是一个指针,初始为NULL。如果有对该函数升级,这个指针将会指向新的升级程序。 在每个函数开始位置处调用一个桩函数stub,stub的参数是本函数枚举量,在stub中根据输入参数去索引列表数组是否有升级程序,如果有则通过改变调用栈参数跳转到新程序中,否则就退出stub,执行原始程序。本发明的有益效果是其一,利用本方法,产品中可以放心的使用ROM保存软件, 对ROM保存的软件也可以升级,从而可以有效的节省硬件成本。其二,如果升级程序有漏洞,也可以利用更新升级程序包的方式来填补漏洞或者执行原始程序以保证软件的正常运行。其三,代码升级可以只针对部分函数进行,可有效的减少升级包的大小,从而减少FLASH 硬件资源的浪费。
图1是本发明嵌入式系统中对ROM程序的升级方法示意图。
具体实施例方式下面,对照附图和较佳实施例对本发明的技术方案进行详细说明。如图1所示,本发明提出的一种嵌入式系统中对ROM程序的升级方法,包括以下步骤a、在生成ROM软件时在每个软件开始位置设置一个升级调用程序模块;b、在FLASH中开辟一块独立的程序升级区,所述程序升级区用于保存升级程序包;C、需要升级软件时,制作升级程序包;d、将升级程序包写入到FLASH的程序升级区;e、升级调用程序模块检测FLASH中是否有升级程序包,若未发现所述的升级程序包,则执行步骤f,若发现所述的升级程序包,则执行g ;f、执行ROM软件中的原始程序;g、则将FLASH中的升级程序包拷贝到RAM中并执行升级程序。升级调用程序模块是由在生成ROM软件时产生一份系统所有函数的列表数组和一个列表枚举来实现的。函数数组中保存的是一个指针,初始为NULL。如果以后有对该函数升级,这个指针将会指向新的升级程序。在每个函数开始位置处调用一个桩函数stub, stub的参数是本函数枚举量,在stub中根据输入参数去索引列表数组是否有升级程序,如果有则通过改变调用栈参数跳转到新程序中,否则就退出stub,执行原始程序。在flash中开辟一份独立的区域保存升级程序和更新后全局函数列表数组,新数组保存了指向升级程序的指针。升级包主要涉及到以下三部分1升级包的制作。利用和发布ROM相同的编译环境,根据测试中发现的bug或者需要添加的新功能, 添加新的函数实现这些功能,不要修改原始的程序代码,同时根据新函数和要替换掉的老函数的对应关系,填充函数列表数组。并且将新的函数列表数组及新函数编译生成一个新的升级包。2升级包的注入。系统运行后利用升级程序将升级包写入到flash中预留的升级区域。并且重启系统。3升级包的使用。系统启动时检查flash中预留的升级区域是否有效,如果有效则利用升级包中新的函数列表数组替换ROM中老的函数列表数组,并且将新的升级代码拷贝到RAM中,为以后代码的执行做准备。系统正常启动后在每个函数的入口出都会调用stub函数,而stub中使用的已经是新的函数列表数组了,所以它可以运行到升级包中的新功能,从而达到升级系统的目的。本发明实施例中嵌入式系统中对ROM程序的升级方法,包括在每个软件开始位置设置一个升级调用程序模块,且在FLASH中开辟一块独立的程序升级区来保存升级程序包。当需要升级软件时,制作升级程序包并将升级程序包写入到FLASH的程序升级区。升级调用程序模块检测FLASH中是否有升级程序包,若未发现所述的升级程序包,则执行ROM 软件中的原始程序,若发现所述的升级程序包,则将FLASH中的升级程序包拷贝到RAM中并执行升级程序。本发明实施例的有益效果在于既可以升级ROM保存的软件,又可以利用更新升级程序包的方式来填补软件漏洞以保证软件的正常运行,还可以只针对部分函数进行升级,以减少FLASH硬件资源的浪费。 虽然以上结合具体实施方式
对本发明内容进行了详细地说明,但是应当理解到, 本领域的技术人员在不违背本发明的原理和实质精神的前提下,对本发明的实施方式可以作出各种变形或者修改,这些变形和修改均应当落入本发明的保护范围。
权利要求
1.一种嵌入式系统中对ROM程序的升级方法,其特征在于包括以下步骤a、在生成ROM软件时在每个软件开始位置设置一个升级调用程序模块;b、在FLASH中开辟一块独立的程序升级区,所述程序升级区用于保存升级程序包;c、需要升级软件时,制作升级程序包;d、将升级程序包写入到FLASH的程序升级区;e、升级调用程序模块检测FLASH中是否有升级程序包,若未发现所述的升级程序包, 则执行步骤f,若发现所述的升级程序包,则执行g ;f、执行ROM软件中的原始程序;g、则将FLASH中的升级程序包拷贝到RAM中并执行升级程序。
2.如权利要求1所述的嵌入式系统中对ROM程序的升级方法,其特征在于所述的升级调用程序模块包括所有函数的列表数组和列表枚举。
3.如权利要求2所述的嵌入式系统中对ROM程序的升级方法,其特征在于所述的函数数组中保存的是一个指针,初始为NULL,如果有对该函数升级,这个指针将会指向新的升级程序。
4.如权利要求2或3任一项所述的嵌入式系统中对ROM程序的升级方法,其特征在于 在每个函数开始位置处调用一个桩函数stub,stub的参数是本函数枚举量,在stub中根据输入参数去索引列表数组是否有升级程序,如果有则通过改变调用栈参数跳转到新程序中,否则就退出stub,执行原始程序。
全文摘要
本发明公开了一种嵌入式系统中对ROM程序的升级方法,包括在每个软件函数开始位置设置一个升级调用程序模块,且在FLASH中开辟一块独立的程序升级区来保存升级程序包。当需要升级软件时,制作升级程序包并将升级程序包写入到FLASH的程序升级区。升级调用程序模块检测FLASH中是否有升级程序包,若未发现所述的升级程序包,则执行ROM软件中的原始程序,若发现所述的升级程序包,则将FLASH中的升级程序包拷贝到RAM中并执行升级程序。本发明的有益效果是既可以升级ROM保存的软件,又可以利用更新升级程序包的方式来填补软件漏洞以保证软件的正常运行,还可以只针对部分函数进行升级,以减少FLASH硬件资源的浪费。
文档编号G06F9/445GK102243587SQ20101017613
公开日2011年11月16日 申请日期2010年5月14日 优先权日2010年5月14日
发明者罗民 申请人:康佳集团股份有限公司